[{"data":1,"prerenderedAt":7359},["ShallowReactive",2],{"navigation-zh":3,"navigation-v1":81,"\u002Fzh\u002Fguide\u002Fmodels":146,"\u002Fzh\u002Fguide\u002Fmodels-surround":3925,"\u002Fzh\u002Fguide\u002Fmodels-og":3930},[4,55,77],{"title":5,"path":6,"stem":7,"children":8},"指南","\u002Fzh\u002Fguide","zh\u002F1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43,47,51],{"title":10,"path":6,"stem":7},"介绍",{"title":12,"path":13,"stem":14},"序言","\u002Fzh\u002Fguide\u002Fprologue","zh\u002F1.guide\u002F00.prologue",{"title":16,"path":17,"stem":18},"快速上手","\u002Fzh\u002Fguide\u002Fgetting-started","zh\u002F1.guide\u002F02.getting-started",{"title":20,"path":21,"stem":22},"模型","\u002Fzh\u002Fguide\u002Fmodels","zh\u002F1.guide\u002F03.models",{"title":24,"path":25,"stem":26},"关联","\u002Fzh\u002Fguide\u002Frelationships","zh\u002F1.guide\u002F04.relationships",{"title":28,"path":29,"stem":30},"钩子","\u002Fzh\u002Fguide\u002Fhooks","zh\u002F1.guide\u002F05.hooks",{"title":32,"path":33,"stem":34},"搜索","\u002Fzh\u002Fguide\u002Fsearch","zh\u002F1.guide\u002F06.search",{"title":36,"path":37,"stem":38},"批量操作","\u002Fzh\u002Fguide\u002Fbatch-operations","zh\u002F1.guide\u002F07.batch-operations",{"title":40,"path":41,"stem":42},"查询参数","\u002Fzh\u002Fguide\u002Fquery-parameters","zh\u002F1.guide\u002F08.query-parameters",{"title":44,"path":45,"stem":46},"安全","\u002Fzh\u002Fguide\u002Fsecurity","zh\u002F1.guide\u002F09.security",{"title":48,"path":49,"stem":50},"响应","\u002Fzh\u002Fguide\u002Fresponses","zh\u002F1.guide\u002F10.responses",{"title":52,"path":53,"stem":54},"规范","\u002Fzh\u002Fguide\u002Fspecifications","zh\u002F1.guide\u002F11.specifications",{"title":56,"path":57,"stem":58,"children":59},"TypeScript SDK","\u002Fzh\u002Ftypescript-sdk","zh\u002F2.typescript-sdk\u002F01.index",[60,61,64,68,71,74],{"title":10,"path":57,"stem":58},{"title":16,"path":62,"stem":63},"\u002Fzh\u002Ftypescript-sdk\u002Fgetting-started","zh\u002F2.typescript-sdk\u002F02.getting-started",{"title":65,"path":66,"stem":67},"配置","\u002Fzh\u002Ftypescript-sdk\u002Fconfiguration","zh\u002F2.typescript-sdk\u002F03.configuration",{"title":20,"path":69,"stem":70},"\u002Fzh\u002Ftypescript-sdk\u002Fmodels","zh\u002F2.typescript-sdk\u002F04.models",{"title":24,"path":72,"stem":73},"\u002Fzh\u002Ftypescript-sdk\u002Frelationships","zh\u002F2.typescript-sdk\u002F05.relationships",{"title":40,"path":75,"stem":76},"\u002Fzh\u002Ftypescript-sdk\u002Fquery-parameters","zh\u002F2.typescript-sdk\u002F06.query-parameters",{"title":78,"path":79,"stem":80},"视频教程","\u002Fzh\u002Fscreencasts","zh\u002Fscreencasts",[82,125],{"title":83,"path":84,"stem":85,"children":86},"Guide","\u002Fv1.x\u002Fguide","v1.x\u002F1.guide\u002F01.index",[87,89,93,97,101,105,109,113,117,121],{"title":88,"path":84,"stem":85},"Introduction",{"title":90,"path":91,"stem":92},"Getting Started","\u002Fv1.x\u002Fguide\u002Fgetting-started","v1.x\u002F1.guide\u002F02.getting-started",{"title":94,"path":95,"stem":96},"Models","\u002Fv1.x\u002Fguide\u002Fmodels","v1.x\u002F1.guide\u002F03.models",{"title":98,"path":99,"stem":100},"Relationships","\u002Fv1.x\u002Fguide\u002Frelationships","v1.x\u002F1.guide\u002F04.relationships",{"title":102,"path":103,"stem":104},"Hooks","\u002Fv1.x\u002Fguide\u002Fhooks","v1.x\u002F1.guide\u002F05.hooks",{"title":106,"path":107,"stem":108},"Search","\u002Fv1.x\u002Fguide\u002Fsearch","v1.x\u002F1.guide\u002F06.search",{"title":110,"path":111,"stem":112},"Batch Operations","\u002Fv1.x\u002Fguide\u002Fbatch-operations","v1.x\u002F1.guide\u002F07.batch-operations",{"title":114,"path":115,"stem":116},"Query Parameters","\u002Fv1.x\u002Fguide\u002Fquery-parameters","v1.x\u002F1.guide\u002F08.query-parameters",{"title":118,"path":119,"stem":120},"Security","\u002Fv1.x\u002Fguide\u002Fsecurity","v1.x\u002F1.guide\u002F09.security",{"title":122,"path":123,"stem":124},"Responses","\u002Fv1.x\u002Fguide\u002Fresponses","v1.x\u002F1.guide\u002F10.responses",{"title":56,"path":126,"stem":127,"children":128},"\u002Fv1.x\u002Ftypescript-sdk","v1.x\u002F2.typescript-sdk\u002F01.index",[129,130,133,137,140,143],{"title":88,"path":126,"stem":127},{"title":90,"path":131,"stem":132},"\u002Fv1.x\u002Ftypescript-sdk\u002Fgetting-started","v1.x\u002F2.typescript-sdk\u002F02.getting-started",{"title":134,"path":135,"stem":136},"Configuration","\u002Fv1.x\u002Ftypescript-sdk\u002Fconfiguration","v1.x\u002F2.typescript-sdk\u002F03.configuration",{"title":94,"path":138,"stem":139},"\u002Fv1.x\u002Ftypescript-sdk\u002Fmodels","v1.x\u002F2.typescript-sdk\u002F04.models",{"title":98,"path":141,"stem":142},"\u002Fv1.x\u002Ftypescript-sdk\u002Frelationships","v1.x\u002F2.typescript-sdk\u002F05.relationships",{"title":114,"path":144,"stem":145},"\u002Fv1.x\u002Ftypescript-sdk\u002Fquery-parameters","v1.x\u002F2.typescript-sdk\u002F06.query-parameters",{"id":147,"title":20,"body":148,"description":3919,"extension":3920,"links":3921,"meta":3922,"navigation":193,"path":21,"seo":3923,"stem":22,"__hash__":3924},"docs_zh\u002Fzh\u002F1.guide\u002F03.models.md",{"type":149,"value":150,"toc":3905},"minimark",[151,155,165,353,357,368,531,560,563,566,738,749,1116,1119,1130,1262,1277,1384,1387,1398,1607,1610,1613,1616,1620,1629,1933,1936,1942,2237,2240,2256,2259,2595,2604,2607,2620,2623,2645,2660,2947,2950,2969,2979,3798,3801,3901],[152,153,154],"h2",{"id":154},"设置控制器",[156,157,158,159,164],"p",{},"要通过 API 暴露一个模型，首先需要为它创建一个控制器。正如你在",[160,161,163],"a",{"href":162},"\u002Fzh\u002Fguide\u002Fgetting-started#%E7%AE%80%E5%8D%95-crud","快速上手 - 简单 CRUD","一节中所看到的，定义模型控制器非常简单。",[166,167,172],"pre",{"className":168,"code":169,"language":170,"meta":171,"style":171},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n}\n","php","",[173,174,175,188,195,225,230,249,272,277,293,299,306,312,318,347],"code",{"__ignoreMap":171},[176,177,180,184],"span",{"class":178,"line":179},"line",1,[176,181,183],{"class":182},"sMK4o","\u003C?",[176,185,187],{"class":186},"sTEyZ","php\n",[176,189,191],{"class":178,"line":190},2,[176,192,194],{"emptyLinePlaceholder":193},true,"\n",[176,196,198,202,206,209,212,214,217,219,222],{"class":178,"line":197},3,[176,199,201],{"class":200},"sbssI","namespace",[176,203,205],{"class":204},"sBMFI"," App",[176,207,208],{"class":182},"\\",[176,210,211],{"class":204},"Http",[176,213,208],{"class":182},[176,215,216],{"class":204},"Controllers",[176,218,208],{"class":182},[176,220,221],{"class":204},"Api",[176,223,224],{"class":182},";\n",[176,226,228],{"class":178,"line":227},4,[176,229,194],{"emptyLinePlaceholder":193},[176,231,233,236,238,240,242,244,247],{"class":178,"line":232},5,[176,234,235],{"class":200},"use",[176,237,205],{"class":186},[176,239,208],{"class":182},[176,241,94],{"class":186},[176,243,208],{"class":182},[176,245,246],{"class":186},"Post",[176,248,224],{"class":182},[176,250,252,254,257,259,261,263,265,267,270],{"class":178,"line":251},6,[176,253,235],{"class":200},[176,255,256],{"class":186}," Orion",[176,258,208],{"class":182},[176,260,211],{"class":186},[176,262,208],{"class":182},[176,264,216],{"class":186},[176,266,208],{"class":182},[176,268,269],{"class":186},"Controller",[176,271,224],{"class":182},[176,273,275],{"class":178,"line":274},7,[176,276,194],{"emptyLinePlaceholder":193},[176,278,280,284,287,290],{"class":178,"line":279},8,[176,281,283],{"class":282},"spNyl","class",[176,285,286],{"class":204}," PostsController",[176,288,289],{"class":282}," extends",[176,291,292],{"class":204}," Controller\n",[176,294,296],{"class":178,"line":295},9,[176,297,298],{"class":182},"{\n",[176,300,302],{"class":178,"line":301},10,[176,303,305],{"class":304},"sHwdD","    \u002F**\n",[176,307,309],{"class":178,"line":308},11,[176,310,311],{"class":304},"     * 模型的完全限定类名\n",[176,313,315],{"class":178,"line":314},12,[176,316,317],{"class":304},"     *\u002F\n",[176,319,321,324,327,330,333,336,339,341,344],{"class":178,"line":320},13,[176,322,323],{"class":282},"    protected",[176,325,326],{"class":182}," $",[176,328,329],{"class":186},"model ",[176,331,332],{"class":182},"=",[176,334,335],{"class":204}," Post",[176,337,338],{"class":182},"::",[176,340,283],{"class":200},[176,342,343],{"class":182},";",[176,345,346],{"class":304}," \u002F\u002F 或 \"App\\Models\\Post\"\n",[176,348,350],{"class":178,"line":349},14,[176,351,352],{"class":182},"}\n",[354,355,356],"h3",{"id":356},"禁用分页",[156,358,359,360,363,364,367],{},"默认情况下，",[173,361,362],{},"index"," 端点返回的资源会进行分页。要禁用分页并返回全部资源，可以使用 ",[173,365,366],{},"DisablePagination"," trait。",[166,369,371],{"className":168,"code":370,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\nuse Orion\\Concerns\\DisablePagination;\n\nclass PostsController extends Controller\n{\n    use DisablePagination;\n\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n}\n",[173,372,373,379,383,403,407,423,443,460,464,474,478,488,492,496,500,505,526],{"__ignoreMap":171},[176,374,375,377],{"class":178,"line":179},[176,376,183],{"class":182},[176,378,187],{"class":186},[176,380,381],{"class":178,"line":190},[176,382,194],{"emptyLinePlaceholder":193},[176,384,385,387,389,391,393,395,397,399,401],{"class":178,"line":197},[176,386,201],{"class":200},[176,388,205],{"class":204},[176,390,208],{"class":182},[176,392,211],{"class":204},[176,394,208],{"class":182},[176,396,216],{"class":204},[176,398,208],{"class":182},[176,400,221],{"class":204},[176,402,224],{"class":182},[176,404,405],{"class":178,"line":227},[176,406,194],{"emptyLinePlaceholder":193},[176,408,409,411,413,415,417,419,421],{"class":178,"line":232},[176,410,235],{"class":200},[176,412,205],{"class":186},[176,414,208],{"class":182},[176,416,94],{"class":186},[176,418,208],{"class":182},[176,420,246],{"class":186},[176,422,224],{"class":182},[176,424,425,427,429,431,433,435,437,439,441],{"class":178,"line":251},[176,426,235],{"class":200},[176,428,256],{"class":186},[176,430,208],{"class":182},[176,432,211],{"class":186},[176,434,208],{"class":182},[176,436,216],{"class":186},[176,438,208],{"class":182},[176,440,269],{"class":186},[176,442,224],{"class":182},[176,444,445,447,449,451,454,456,458],{"class":178,"line":274},[176,446,235],{"class":200},[176,448,256],{"class":186},[176,450,208],{"class":182},[176,452,453],{"class":186},"Concerns",[176,455,208],{"class":182},[176,457,366],{"class":186},[176,459,224],{"class":182},[176,461,462],{"class":178,"line":279},[176,463,194],{"emptyLinePlaceholder":193},[176,465,466,468,470,472],{"class":178,"line":295},[176,467,283],{"class":282},[176,469,286],{"class":204},[176,471,289],{"class":282},[176,473,292],{"class":204},[176,475,476],{"class":178,"line":301},[176,477,298],{"class":182},[176,479,480,483,486],{"class":178,"line":308},[176,481,482],{"class":200},"    use",[176,484,485],{"class":186}," DisablePagination",[176,487,224],{"class":182},[176,489,490],{"class":178,"line":314},[176,491,194],{"emptyLinePlaceholder":193},[176,493,494],{"class":178,"line":320},[176,495,305],{"class":304},[176,497,498],{"class":178,"line":349},[176,499,311],{"class":304},[176,501,503],{"class":178,"line":502},15,[176,504,317],{"class":304},[176,506,508,510,512,514,516,518,520,522,524],{"class":178,"line":507},16,[176,509,323],{"class":282},[176,511,326],{"class":182},[176,513,329],{"class":186},[176,515,332],{"class":182},[176,517,335],{"class":204},[176,519,338],{"class":182},[176,521,283],{"class":200},[176,523,343],{"class":182},[176,525,346],{"class":304},[176,527,529],{"class":178,"line":528},17,[176,530,352],{"class":182},[532,533,535,538],"note",{"icon":534},"i-lucide-lightbulb",[156,536,537],{},"要点回顾",[539,540,541,548,554],"ul",{},[542,543,544,545],"li",{},"模型控制器始终继承 ",[173,546,547],{},"Orion\\Http\\Controllers\\Controller",[542,549,550,553],{},[173,551,552],{},"$model"," 属性设置为完全限定的模型类名",[542,555,556,557,559],{},"使用 ",[173,558,366],{}," trait 可以同时为模型资源和关联资源禁用分页",[152,561,562],{"id":562},"设置路由",[156,564,565],{},"控制器创建完成后，就可以注册路由了。",[166,567,569],{"className":168,"code":568,"language":170,"meta":171,"style":171},"\u003C?php\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Orion\\Facades\\Orion;\nuse App\\Http\\Controllers\\PostsController;\n\nRoute::group(['as' => 'api.'], function() {\n    ...\n    Orion::resource('posts', PostsController::class);\n    ...\n});\n\n",[173,570,571,577,581,605,622,643,647,692,697,729,733],{"__ignoreMap":171},[176,572,573,575],{"class":178,"line":179},[176,574,183],{"class":182},[176,576,187],{"class":186},[176,578,579],{"class":178,"line":190},[176,580,194],{"emptyLinePlaceholder":193},[176,582,583,585,588,590,593,595,598,600,603],{"class":178,"line":197},[176,584,235],{"class":200},[176,586,587],{"class":186}," Illuminate",[176,589,208],{"class":182},[176,591,592],{"class":186},"Support",[176,594,208],{"class":182},[176,596,597],{"class":186},"Facades",[176,599,208],{"class":182},[176,601,602],{"class":186},"Route",[176,604,224],{"class":182},[176,606,607,609,611,613,615,617,620],{"class":178,"line":227},[176,608,235],{"class":200},[176,610,256],{"class":186},[176,612,208],{"class":182},[176,614,597],{"class":186},[176,616,208],{"class":182},[176,618,619],{"class":186},"Orion",[176,621,224],{"class":182},[176,623,624,626,628,630,632,634,636,638,641],{"class":178,"line":232},[176,625,235],{"class":200},[176,627,205],{"class":186},[176,629,208],{"class":182},[176,631,211],{"class":186},[176,633,208],{"class":182},[176,635,216],{"class":186},[176,637,208],{"class":182},[176,639,640],{"class":186},"PostsController",[176,642,224],{"class":182},[176,644,645],{"class":178,"line":251},[176,646,194],{"emptyLinePlaceholder":193},[176,648,649,651,653,657,660,663,667,669,672,675,678,680,683,686,689],{"class":178,"line":274},[176,650,602],{"class":204},[176,652,338],{"class":182},[176,654,656],{"class":655},"s2Zo4","group",[176,658,659],{"class":182},"([",[176,661,662],{"class":182},"'",[176,664,666],{"class":665},"sfazB","as",[176,668,662],{"class":182},[176,670,671],{"class":182}," =>",[176,673,674],{"class":182}," '",[176,676,677],{"class":665},"api.",[176,679,662],{"class":182},[176,681,682],{"class":182},"],",[176,684,685],{"class":282}," function",[176,687,688],{"class":182},"()",[176,690,691],{"class":182}," {\n",[176,693,694],{"class":178,"line":279},[176,695,696],{"class":182},"    ...\n",[176,698,699,702,704,707,710,712,715,717,720,722,724,726],{"class":178,"line":295},[176,700,701],{"class":204},"    Orion",[176,703,338],{"class":182},[176,705,706],{"class":655},"resource",[176,708,709],{"class":182},"(",[176,711,662],{"class":182},[176,713,714],{"class":665},"posts",[176,716,662],{"class":182},[176,718,719],{"class":182},",",[176,721,286],{"class":204},[176,723,338],{"class":182},[176,725,283],{"class":200},[176,727,728],{"class":182},");\n",[176,730,731],{"class":178,"line":301},[176,732,696],{"class":182},[176,734,735],{"class":178,"line":308},[176,736,737],{"class":182},"});\n",[156,739,740,741,744,745,748],{},"本质上，",[173,742,743],{},"Orion::resource"," 方法与 Laravel 默认的 ",[173,746,747],{},"Route::apiResource"," 相同——它会创建多条路由，用于处理针对资源的各种操作。",[166,750,754],{"className":751,"code":752,"language":753,"meta":171,"style":171},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+\n| Domain | Method    | URI                                             | Name                                   | Action                                                                    | Middleware                                      |\n+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+\n...\n|        | GET|HEAD  | api\u002Fposts                                       | api.posts.index                        | App\\Http\\Controllers\\Api\\PostsController@index                            | api                                             |\n|        | POST      | api\u002Fposts\u002Fsearch                                | api.posts.search                       | App\\Http\\Controllers\\Api\\PostsController@index                            | api                                             |\n|        | POST      | api\u002Fposts                                       | api.posts.store                        | App\\Http\\Controllers\\Api\\PostsController@store                            | api                                             |\n|        | GET|HEAD  | api\u002Fposts\u002F{post}                                | api.posts.show                         | App\\Http\\Controllers\\Api\\PostsController@show                             | api                                             |  \n|        | PUT|PATCH | api\u002Fposts\u002F{post}                                | api.posts.update                       | App\\Http\\Controllers\\Api\\PostsController@update                           | api                                             |\n|        | DELETE    | api\u002Fposts\u002F{post}                                | api.posts.destroy                      | App\\Http\\Controllers\\Api\\PostsController@destroy                          | api                                             |\n|        | POST      | api\u002Fposts\u002Fbatch                                 | api.posts.batchStore                   | App\\Http\\Controllers\\Api\\PostsController@batchStore                       | api                                             |\n|        | PATCH     | api\u002Fposts\u002Fbatch                                 | api.posts.batchUpdate                  | App\\Http\\Controllers\\Api\\PostsController@batchUpdate                      | api                                             |\n|        | DELETE    | api\u002Fposts\u002Fbatch                                 | api.posts.batchDestroy                 | App\\Http\\Controllers\\Api\\PostsController@batchDestroy                     | api                                             |\n","bash",[173,755,756,761,802,806,811,853,885,913,954,991,1024,1055,1086],{"__ignoreMap":171},[176,757,758],{"class":178,"line":179},[176,759,760],{"class":204},"+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+\n",[176,762,763,766,769,772,775,778,781,784,787,790,793,796,799],{"class":178,"line":190},[176,764,765],{"class":182},"|",[176,767,768],{"class":204}," Domain",[176,770,771],{"class":182}," |",[176,773,774],{"class":204}," Method",[176,776,777],{"class":182},"    |",[176,779,780],{"class":204}," URI",[176,782,783],{"class":182},"                                             |",[176,785,786],{"class":204}," Name",[176,788,789],{"class":182},"                                   |",[176,791,792],{"class":204}," Action",[176,794,795],{"class":182},"                                                                    |",[176,797,798],{"class":204}," Middleware",[176,800,801],{"class":182},"                                      |\n",[176,803,804],{"class":178,"line":197},[176,805,760],{"class":204},[176,807,808],{"class":178,"line":227},[176,809,810],{"class":655},"...\n",[176,812,813,815,818,821,823,826,829,832,835,838,841,844,847,850],{"class":178,"line":232},[176,814,765],{"class":182},[176,816,817],{"class":182},"        |",[176,819,820],{"class":204}," GET",[176,822,765],{"class":182},[176,824,825],{"class":204},"HEAD",[176,827,828],{"class":182},"  |",[176,830,831],{"class":204}," api\u002Fposts",[176,833,834],{"class":182},"                                       |",[176,836,837],{"class":204}," api.posts.index",[176,839,840],{"class":182},"                        |",[176,842,843],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@index",[176,845,846],{"class":182},"                            |",[176,848,849],{"class":204}," api",[176,851,852],{"class":182},"                                             |\n",[176,854,855,857,859,862,865,868,871,874,877,879,881,883],{"class":178,"line":251},[176,856,765],{"class":182},[176,858,817],{"class":182},[176,860,861],{"class":204}," POST",[176,863,864],{"class":182},"      |",[176,866,867],{"class":204}," api\u002Fposts\u002Fsearch",[176,869,870],{"class":182},"                                |",[176,872,873],{"class":204}," api.posts.search",[176,875,876],{"class":182},"                       |",[176,878,843],{"class":204},[176,880,846],{"class":182},[176,882,849],{"class":204},[176,884,852],{"class":182},[176,886,887,889,891,893,895,897,899,902,904,907,909,911],{"class":178,"line":274},[176,888,765],{"class":182},[176,890,817],{"class":182},[176,892,861],{"class":204},[176,894,864],{"class":182},[176,896,831],{"class":204},[176,898,834],{"class":182},[176,900,901],{"class":204}," api.posts.store",[176,903,840],{"class":182},[176,905,906],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@store",[176,908,846],{"class":182},[176,910,849],{"class":204},[176,912,852],{"class":182},[176,914,915,917,919,921,923,925,927,930,933,935,938,941,944,947,949,951],{"class":178,"line":279},[176,916,765],{"class":182},[176,918,817],{"class":182},[176,920,820],{"class":204},[176,922,765],{"class":182},[176,924,825],{"class":204},[176,926,828],{"class":182},[176,928,929],{"class":204}," api\u002Fposts\u002F",[176,931,932],{"class":665},"{post}",[176,934,870],{"class":182},[176,936,937],{"class":204}," api.posts.show",[176,939,940],{"class":182},"                         |",[176,942,943],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@show",[176,945,946],{"class":182},"                             |",[176,948,849],{"class":204},[176,950,783],{"class":182},[176,952,953],{"class":186},"  \n",[176,955,956,958,960,963,965,968,970,972,974,976,979,981,984,987,989],{"class":178,"line":295},[176,957,765],{"class":182},[176,959,817],{"class":182},[176,961,962],{"class":204}," PUT",[176,964,765],{"class":182},[176,966,967],{"class":204},"PATCH",[176,969,771],{"class":182},[176,971,929],{"class":204},[176,973,932],{"class":665},[176,975,870],{"class":182},[176,977,978],{"class":204}," api.posts.update",[176,980,876],{"class":182},[176,982,983],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@update",[176,985,986],{"class":182},"                           |",[176,988,849],{"class":204},[176,990,852],{"class":182},[176,992,993,995,997,1000,1002,1004,1006,1008,1011,1014,1017,1020,1022],{"class":178,"line":301},[176,994,765],{"class":182},[176,996,817],{"class":182},[176,998,999],{"class":204}," DELETE",[176,1001,777],{"class":182},[176,1003,929],{"class":204},[176,1005,932],{"class":665},[176,1007,870],{"class":182},[176,1009,1010],{"class":204}," api.posts.destroy",[176,1012,1013],{"class":182},"                      |",[176,1015,1016],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@destroy",[176,1018,1019],{"class":182},"                          |",[176,1021,849],{"class":204},[176,1023,852],{"class":182},[176,1025,1026,1028,1030,1032,1034,1037,1040,1043,1046,1049,1051,1053],{"class":178,"line":308},[176,1027,765],{"class":182},[176,1029,817],{"class":182},[176,1031,861],{"class":204},[176,1033,864],{"class":182},[176,1035,1036],{"class":204}," api\u002Fposts\u002Fbatch",[176,1038,1039],{"class":182},"                                 |",[176,1041,1042],{"class":204}," api.posts.batchStore",[176,1044,1045],{"class":182},"                   |",[176,1047,1048],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@batchStore",[176,1050,876],{"class":182},[176,1052,849],{"class":204},[176,1054,852],{"class":182},[176,1056,1057,1059,1061,1064,1067,1069,1071,1074,1077,1080,1082,1084],{"class":178,"line":314},[176,1058,765],{"class":182},[176,1060,817],{"class":182},[176,1062,1063],{"class":204}," PATCH",[176,1065,1066],{"class":182},"     |",[176,1068,1036],{"class":204},[176,1070,1039],{"class":182},[176,1072,1073],{"class":204}," api.posts.batchUpdate",[176,1075,1076],{"class":182},"                  |",[176,1078,1079],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@batchUpdate",[176,1081,1013],{"class":182},[176,1083,849],{"class":204},[176,1085,852],{"class":182},[176,1087,1088,1090,1092,1094,1096,1098,1100,1103,1106,1109,1112,1114],{"class":178,"line":320},[176,1089,765],{"class":182},[176,1091,817],{"class":182},[176,1093,999],{"class":204},[176,1095,777],{"class":182},[176,1097,1036],{"class":204},[176,1099,1039],{"class":182},[176,1101,1102],{"class":204}," api.posts.batchDestroy",[176,1104,1105],{"class":182},"                 |",[176,1107,1108],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@batchDestroy",[176,1110,1111],{"class":182},"                     |",[176,1113,849],{"class":204},[176,1115,852],{"class":182},[354,1117,1118],{"id":1118},"软删除",[156,1120,1121,1122,1125,1126,1129],{},"如果你的模型使用了 ",[173,1123,1124],{},"SoftDeletes"," trait，并且希望通过 API 暴露相同的功能，请在注册资源时调用 ",[173,1127,1128],{},"withSoftDeletes"," 方法。",[166,1131,1133],{"className":168,"code":1132,"language":170,"meta":171,"style":171},"\u003C?php\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Orion\\Facades\\Orion;\n\nRoute::group(['as' => 'api.'], function() {\n    ...\n    Orion::resource('posts', 'Api\\PostsController')->withSoftDeletes();\n    ...\n});\n\n",[173,1134,1135,1141,1145,1165,1181,1185,1217,1221,1254,1258],{"__ignoreMap":171},[176,1136,1137,1139],{"class":178,"line":179},[176,1138,183],{"class":182},[176,1140,187],{"class":186},[176,1142,1143],{"class":178,"line":190},[176,1144,194],{"emptyLinePlaceholder":193},[176,1146,1147,1149,1151,1153,1155,1157,1159,1161,1163],{"class":178,"line":197},[176,1148,235],{"class":200},[176,1150,587],{"class":186},[176,1152,208],{"class":182},[176,1154,592],{"class":186},[176,1156,208],{"class":182},[176,1158,597],{"class":186},[176,1160,208],{"class":182},[176,1162,602],{"class":186},[176,1164,224],{"class":182},[176,1166,1167,1169,1171,1173,1175,1177,1179],{"class":178,"line":227},[176,1168,235],{"class":200},[176,1170,256],{"class":186},[176,1172,208],{"class":182},[176,1174,597],{"class":186},[176,1176,208],{"class":182},[176,1178,619],{"class":186},[176,1180,224],{"class":182},[176,1182,1183],{"class":178,"line":232},[176,1184,194],{"emptyLinePlaceholder":193},[176,1186,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215],{"class":178,"line":251},[176,1188,602],{"class":204},[176,1190,338],{"class":182},[176,1192,656],{"class":655},[176,1194,659],{"class":182},[176,1196,662],{"class":182},[176,1198,666],{"class":665},[176,1200,662],{"class":182},[176,1202,671],{"class":182},[176,1204,674],{"class":182},[176,1206,677],{"class":665},[176,1208,662],{"class":182},[176,1210,682],{"class":182},[176,1212,685],{"class":282},[176,1214,688],{"class":182},[176,1216,691],{"class":182},[176,1218,1219],{"class":178,"line":274},[176,1220,696],{"class":182},[176,1222,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1244,1246,1249,1251],{"class":178,"line":279},[176,1224,701],{"class":204},[176,1226,338],{"class":182},[176,1228,706],{"class":655},[176,1230,709],{"class":182},[176,1232,662],{"class":182},[176,1234,714],{"class":665},[176,1236,662],{"class":182},[176,1238,719],{"class":182},[176,1240,674],{"class":182},[176,1242,1243],{"class":665},"Api\\PostsController",[176,1245,662],{"class":182},[176,1247,1248],{"class":182},")->",[176,1250,1128],{"class":655},[176,1252,1253],{"class":182},"();\n",[176,1255,1256],{"class":178,"line":295},[176,1257,696],{"class":182},[176,1259,1260],{"class":178,"line":301},[176,1261,737],{"class":182},[156,1263,1264,1265,1268,1269,1272,1273,1276],{},"这会引入 ",[173,1266,1267],{},"restore"," 和 ",[173,1270,1271],{},"batchRestore"," 端点。要了解如何通过 API 永久删除资源（强制删除），请参阅相关的",[160,1274,40],{"href":1275},"\u002Fzh\u002Fguide\u002Fquery-parameters#%E8%BD%AF%E5%88%A0%E9%99%A4","一节。",[166,1278,1280],{"className":751,"code":1279,"language":753,"meta":171,"style":171},"+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+\n| Domain | Method    | URI                                             | Name                                   | Action                                                                    | Middleware                                      |\n+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+\n...\n|        | POST      | api\u002Fposts\u002F{post}\u002Frestore                        | api.posts.restore                      | App\\Http\\Controllers\\Api\\PostsController@restore                          | api                                             |\n|        | POST      | api\u002Fposts\u002Fbatch\u002Frestore                         | api.posts.batchRestore                 | App\\Http\\Controllers\\Api\\PostsController@batchRestore                     | api                                             |\n",[173,1281,1282,1286,1314,1318,1322,1355],{"__ignoreMap":171},[176,1283,1284],{"class":178,"line":179},[176,1285,760],{"class":204},[176,1287,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312],{"class":178,"line":190},[176,1289,765],{"class":182},[176,1291,768],{"class":204},[176,1293,771],{"class":182},[176,1295,774],{"class":204},[176,1297,777],{"class":182},[176,1299,780],{"class":204},[176,1301,783],{"class":182},[176,1303,786],{"class":204},[176,1305,789],{"class":182},[176,1307,792],{"class":204},[176,1309,795],{"class":182},[176,1311,798],{"class":204},[176,1313,801],{"class":182},[176,1315,1316],{"class":178,"line":197},[176,1317,760],{"class":204},[176,1319,1320],{"class":178,"line":227},[176,1321,810],{"class":655},[176,1323,1324,1326,1328,1330,1332,1334,1336,1339,1341,1344,1346,1349,1351,1353],{"class":178,"line":232},[176,1325,765],{"class":182},[176,1327,817],{"class":182},[176,1329,861],{"class":204},[176,1331,864],{"class":182},[176,1333,929],{"class":204},[176,1335,932],{"class":665},[176,1337,1338],{"class":204},"\u002Frestore",[176,1340,840],{"class":182},[176,1342,1343],{"class":204}," api.posts.restore",[176,1345,1013],{"class":182},[176,1347,1348],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@restore",[176,1350,1019],{"class":182},[176,1352,849],{"class":204},[176,1354,852],{"class":182},[176,1356,1357,1359,1361,1363,1365,1368,1370,1373,1375,1378,1380,1382],{"class":178,"line":251},[176,1358,765],{"class":182},[176,1360,817],{"class":182},[176,1362,861],{"class":204},[176,1364,864],{"class":182},[176,1366,1367],{"class":204}," api\u002Fposts\u002Fbatch\u002Frestore",[176,1369,940],{"class":182},[176,1371,1372],{"class":204}," api.posts.batchRestore",[176,1374,1105],{"class":182},[176,1376,1377],{"class":204}," App\\Http\\Controllers\\Api\\PostsController@batchRestore",[176,1379,1111],{"class":182},[176,1381,849],{"class":204},[176,1383,852],{"class":182},[152,1385,1386],{"id":1386},"自定义键名",[156,1388,1389,1390,1393,1394,1397],{},"默认情况下，端点使用主键（通常是 ",[173,1391,1392],{},"id","）从数据库中检索模型。但在某些情况下，你可能希望在保持主键不变的同时，使用其他字段来获取模型。为此，请在控制器上重写 ",[173,1395,1396],{},"keyName"," 方法：",[166,1399,1401],{"className":168,"code":1400,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n\n    \u002F**\n     * 用于从数据库中获取资源的字段名称。\n     *\n     * @return string\n     *\u002F\n    protected function keyName(): string\n    {\n        return 'slug';\n    }\n}\n",[173,1402,1403,1409,1413,1433,1437,1453,1473,1477,1487,1491,1495,1499,1503,1523,1527,1531,1536,1541,1554,1559,1574,1580,1596,1602],{"__ignoreMap":171},[176,1404,1405,1407],{"class":178,"line":179},[176,1406,183],{"class":182},[176,1408,187],{"class":186},[176,1410,1411],{"class":178,"line":190},[176,1412,194],{"emptyLinePlaceholder":193},[176,1414,1415,1417,1419,1421,1423,1425,1427,1429,1431],{"class":178,"line":197},[176,1416,201],{"class":200},[176,1418,205],{"class":204},[176,1420,208],{"class":182},[176,1422,211],{"class":204},[176,1424,208],{"class":182},[176,1426,216],{"class":204},[176,1428,208],{"class":182},[176,1430,221],{"class":204},[176,1432,224],{"class":182},[176,1434,1435],{"class":178,"line":227},[176,1436,194],{"emptyLinePlaceholder":193},[176,1438,1439,1441,1443,1445,1447,1449,1451],{"class":178,"line":232},[176,1440,235],{"class":200},[176,1442,205],{"class":186},[176,1444,208],{"class":182},[176,1446,94],{"class":186},[176,1448,208],{"class":182},[176,1450,246],{"class":186},[176,1452,224],{"class":182},[176,1454,1455,1457,1459,1461,1463,1465,1467,1469,1471],{"class":178,"line":251},[176,1456,235],{"class":200},[176,1458,256],{"class":186},[176,1460,208],{"class":182},[176,1462,211],{"class":186},[176,1464,208],{"class":182},[176,1466,216],{"class":186},[176,1468,208],{"class":182},[176,1470,269],{"class":186},[176,1472,224],{"class":182},[176,1474,1475],{"class":178,"line":274},[176,1476,194],{"emptyLinePlaceholder":193},[176,1478,1479,1481,1483,1485],{"class":178,"line":279},[176,1480,283],{"class":282},[176,1482,286],{"class":204},[176,1484,289],{"class":282},[176,1486,292],{"class":204},[176,1488,1489],{"class":178,"line":295},[176,1490,298],{"class":182},[176,1492,1493],{"class":178,"line":301},[176,1494,305],{"class":304},[176,1496,1497],{"class":178,"line":308},[176,1498,311],{"class":304},[176,1500,1501],{"class":178,"line":314},[176,1502,317],{"class":304},[176,1504,1505,1507,1509,1511,1513,1515,1517,1519,1521],{"class":178,"line":320},[176,1506,323],{"class":282},[176,1508,326],{"class":182},[176,1510,329],{"class":186},[176,1512,332],{"class":182},[176,1514,335],{"class":204},[176,1516,338],{"class":182},[176,1518,283],{"class":200},[176,1520,343],{"class":182},[176,1522,346],{"class":304},[176,1524,1525],{"class":178,"line":349},[176,1526,194],{"emptyLinePlaceholder":193},[176,1528,1529],{"class":178,"line":502},[176,1530,305],{"class":304},[176,1532,1533],{"class":178,"line":507},[176,1534,1535],{"class":304},"     * 用于从数据库中获取资源的字段名称。\n",[176,1537,1538],{"class":178,"line":528},[176,1539,1540],{"class":304},"     *\n",[176,1542,1544,1547,1551],{"class":178,"line":1543},18,[176,1545,1546],{"class":304},"     * ",[176,1548,1550],{"class":1549},"svl4J","@return",[176,1552,1553],{"class":1549}," string\n",[176,1555,1557],{"class":178,"line":1556},19,[176,1558,317],{"class":304},[176,1560,1562,1564,1566,1569,1572],{"class":178,"line":1561},20,[176,1563,323],{"class":282},[176,1565,685],{"class":282},[176,1567,1568],{"class":655}," keyName",[176,1570,1571],{"class":182},"():",[176,1573,1553],{"class":200},[176,1575,1577],{"class":178,"line":1576},21,[176,1578,1579],{"class":182},"    {\n",[176,1581,1583,1587,1589,1592,1594],{"class":178,"line":1582},22,[176,1584,1586],{"class":1585},"s7zQu","        return",[176,1588,674],{"class":182},[176,1590,1591],{"class":665},"slug",[176,1593,662],{"class":182},[176,1595,224],{"class":182},[176,1597,1599],{"class":178,"line":1598},23,[176,1600,1601],{"class":182},"    }\n",[176,1603,1605],{"class":178,"line":1604},24,[176,1606,352],{"class":182},[152,1608,1609],{"id":1609},"自定义查询",[156,1611,1612],{},"Orion 非常灵活，允许你重新定义每个端点的 Eloquent 查询是如何构建和运行的。",[354,1614,1615],{"id":1615},"针对单个端点",[1617,1618,1619],"h4",{"id":1619},"构建查询",[156,1621,1622,1623,1625,1626,1397],{},"假设你希望 ",[173,1624,362],{}," 端点只返回已发布的博客文章。为此，请在控制器上重写 ",[173,1627,1628],{},"buildIndexFetchQuery",[166,1630,1632],{"className":168,"code":1631,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n\n    \u002F**\n     * 构建用于在 index 方法中获取实体的 Eloquent 查询。\n     *\n     * @param Request $request\n     * @param array $requestedRelations\n     * @return Builder\n     *\u002F\n    protected function buildIndexFetchQuery(Request $request, array $requestedRelations): Builder\n    {\n        $query = parent::buildIndexFetchQuery($request, $requestedRelations);\n\n        $query->whereNotNull('published_at');\n\n        return $query;\n    }\n}\n",[173,1633,1634,1640,1644,1664,1668,1684,1704,1708,1718,1722,1726,1730,1734,1754,1758,1762,1767,1771,1785,1797,1806,1810,1843,1847,1877,1882,1907,1912,1923,1928],{"__ignoreMap":171},[176,1635,1636,1638],{"class":178,"line":179},[176,1637,183],{"class":182},[176,1639,187],{"class":186},[176,1641,1642],{"class":178,"line":190},[176,1643,194],{"emptyLinePlaceholder":193},[176,1645,1646,1648,1650,1652,1654,1656,1658,1660,1662],{"class":178,"line":197},[176,1647,201],{"class":200},[176,1649,205],{"class":204},[176,1651,208],{"class":182},[176,1653,211],{"class":204},[176,1655,208],{"class":182},[176,1657,216],{"class":204},[176,1659,208],{"class":182},[176,1661,221],{"class":204},[176,1663,224],{"class":182},[176,1665,1666],{"class":178,"line":227},[176,1667,194],{"emptyLinePlaceholder":193},[176,1669,1670,1672,1674,1676,1678,1680,1682],{"class":178,"line":232},[176,1671,235],{"class":200},[176,1673,205],{"class":186},[176,1675,208],{"class":182},[176,1677,94],{"class":186},[176,1679,208],{"class":182},[176,1681,246],{"class":186},[176,1683,224],{"class":182},[176,1685,1686,1688,1690,1692,1694,1696,1698,1700,1702],{"class":178,"line":251},[176,1687,235],{"class":200},[176,1689,256],{"class":186},[176,1691,208],{"class":182},[176,1693,211],{"class":186},[176,1695,208],{"class":182},[176,1697,216],{"class":186},[176,1699,208],{"class":182},[176,1701,269],{"class":186},[176,1703,224],{"class":182},[176,1705,1706],{"class":178,"line":274},[176,1707,194],{"emptyLinePlaceholder":193},[176,1709,1710,1712,1714,1716],{"class":178,"line":279},[176,1711,283],{"class":282},[176,1713,286],{"class":204},[176,1715,289],{"class":282},[176,1717,292],{"class":204},[176,1719,1720],{"class":178,"line":295},[176,1721,298],{"class":182},[176,1723,1724],{"class":178,"line":301},[176,1725,305],{"class":304},[176,1727,1728],{"class":178,"line":308},[176,1729,311],{"class":304},[176,1731,1732],{"class":178,"line":314},[176,1733,317],{"class":304},[176,1735,1736,1738,1740,1742,1744,1746,1748,1750,1752],{"class":178,"line":320},[176,1737,323],{"class":282},[176,1739,326],{"class":182},[176,1741,329],{"class":186},[176,1743,332],{"class":182},[176,1745,335],{"class":204},[176,1747,338],{"class":182},[176,1749,283],{"class":200},[176,1751,343],{"class":182},[176,1753,346],{"class":304},[176,1755,1756],{"class":178,"line":349},[176,1757,194],{"emptyLinePlaceholder":193},[176,1759,1760],{"class":178,"line":502},[176,1761,305],{"class":304},[176,1763,1764],{"class":178,"line":507},[176,1765,1766],{"class":304},"     * 构建用于在 index 方法中获取实体的 Eloquent 查询。\n",[176,1768,1769],{"class":178,"line":528},[176,1770,1540],{"class":304},[176,1772,1773,1775,1778,1782],{"class":178,"line":1543},[176,1774,1546],{"class":304},[176,1776,1777],{"class":1549},"@param",[176,1779,1781],{"class":1780},"sFweD"," Request",[176,1783,1784],{"class":304}," $request\n",[176,1786,1787,1789,1791,1794],{"class":178,"line":1556},[176,1788,1546],{"class":304},[176,1790,1777],{"class":1549},[176,1792,1793],{"class":1549}," array",[176,1795,1796],{"class":304}," $requestedRelations\n",[176,1798,1799,1801,1803],{"class":178,"line":1561},[176,1800,1546],{"class":304},[176,1802,1550],{"class":1549},[176,1804,1805],{"class":1780}," Builder\n",[176,1807,1808],{"class":178,"line":1576},[176,1809,317],{"class":304},[176,1811,1812,1814,1816,1819,1821,1824,1826,1829,1831,1833,1835,1838,1841],{"class":178,"line":1582},[176,1813,323],{"class":282},[176,1815,685],{"class":282},[176,1817,1818],{"class":655}," buildIndexFetchQuery",[176,1820,709],{"class":182},[176,1822,1823],{"class":204},"Request",[176,1825,326],{"class":182},[176,1827,1828],{"class":186},"request",[176,1830,719],{"class":182},[176,1832,1793],{"class":200},[176,1834,326],{"class":182},[176,1836,1837],{"class":186},"requestedRelations",[176,1839,1840],{"class":182},"):",[176,1842,1805],{"class":204},[176,1844,1845],{"class":178,"line":1598},[176,1846,1579],{"class":182},[176,1848,1849,1852,1855,1857,1860,1862,1864,1867,1869,1871,1873,1875],{"class":178,"line":1604},[176,1850,1851],{"class":182},"        $",[176,1853,1854],{"class":186},"query ",[176,1856,332],{"class":182},[176,1858,1859],{"class":282}," parent",[176,1861,338],{"class":182},[176,1863,1628],{"class":655},[176,1865,1866],{"class":182},"($",[176,1868,1828],{"class":186},[176,1870,719],{"class":182},[176,1872,326],{"class":182},[176,1874,1837],{"class":186},[176,1876,728],{"class":182},[176,1878,1880],{"class":178,"line":1879},25,[176,1881,194],{"emptyLinePlaceholder":193},[176,1883,1885,1887,1890,1893,1896,1898,1900,1903,1905],{"class":178,"line":1884},26,[176,1886,1851],{"class":182},[176,1888,1889],{"class":186},"query",[176,1891,1892],{"class":182},"->",[176,1894,1895],{"class":655},"whereNotNull",[176,1897,709],{"class":182},[176,1899,662],{"class":182},[176,1901,1902],{"class":665},"published_at",[176,1904,662],{"class":182},[176,1906,728],{"class":182},[176,1908,1910],{"class":178,"line":1909},27,[176,1911,194],{"emptyLinePlaceholder":193},[176,1913,1915,1917,1919,1921],{"class":178,"line":1914},28,[176,1916,1586],{"class":1585},[176,1918,326],{"class":182},[176,1920,1889],{"class":186},[176,1922,224],{"class":182},[176,1924,1926],{"class":178,"line":1925},29,[176,1927,1601],{"class":182},[176,1929,1931],{"class":178,"line":1930},30,[176,1932,352],{"class":182},[1617,1934,1935],{"id":1935},"运行查询",[156,1937,1938,1939,1397],{},"一个常见的例子是在获取模型列表时只选取特定的列。为此，请重写 ",[173,1940,1941],{},"runIndexFetchQuery",[166,1943,1945],{"className":168,"code":1944,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n\n    ...\n\n    \u002F**\n     * 运行给定的查询以在 index 方法中获取实体。\n     *\n     * @param Request $request\n     * @param Builder $query\n     * @param int $paginationLimit\n     * @return LengthAwarePaginator\n     *\u002F\n    protected function runIndexFetchQuery(Request $request, Builder $query, int $paginationLimit): LengthAwarePaginator\n    {\n        return $query->paginate($paginationLimit, ['id', 'title', 'published_at']);\n    }\n}\n",[173,1946,1947,1953,1957,1977,1981,1997,2017,2021,2031,2035,2039,2043,2047,2067,2071,2075,2079,2083,2088,2092,2102,2114,2126,2135,2139,2177,2181,2229,2233],{"__ignoreMap":171},[176,1948,1949,1951],{"class":178,"line":179},[176,1950,183],{"class":182},[176,1952,187],{"class":186},[176,1954,1955],{"class":178,"line":190},[176,1956,194],{"emptyLinePlaceholder":193},[176,1958,1959,1961,1963,1965,1967,1969,1971,1973,1975],{"class":178,"line":197},[176,1960,201],{"class":200},[176,1962,205],{"class":204},[176,1964,208],{"class":182},[176,1966,211],{"class":204},[176,1968,208],{"class":182},[176,1970,216],{"class":204},[176,1972,208],{"class":182},[176,1974,221],{"class":204},[176,1976,224],{"class":182},[176,1978,1979],{"class":178,"line":227},[176,1980,194],{"emptyLinePlaceholder":193},[176,1982,1983,1985,1987,1989,1991,1993,1995],{"class":178,"line":232},[176,1984,235],{"class":200},[176,1986,205],{"class":186},[176,1988,208],{"class":182},[176,1990,94],{"class":186},[176,1992,208],{"class":182},[176,1994,246],{"class":186},[176,1996,224],{"class":182},[176,1998,1999,2001,2003,2005,2007,2009,2011,2013,2015],{"class":178,"line":251},[176,2000,235],{"class":200},[176,2002,256],{"class":186},[176,2004,208],{"class":182},[176,2006,211],{"class":186},[176,2008,208],{"class":182},[176,2010,216],{"class":186},[176,2012,208],{"class":182},[176,2014,269],{"class":186},[176,2016,224],{"class":182},[176,2018,2019],{"class":178,"line":274},[176,2020,194],{"emptyLinePlaceholder":193},[176,2022,2023,2025,2027,2029],{"class":178,"line":279},[176,2024,283],{"class":282},[176,2026,286],{"class":204},[176,2028,289],{"class":282},[176,2030,292],{"class":204},[176,2032,2033],{"class":178,"line":295},[176,2034,298],{"class":182},[176,2036,2037],{"class":178,"line":301},[176,2038,305],{"class":304},[176,2040,2041],{"class":178,"line":308},[176,2042,311],{"class":304},[176,2044,2045],{"class":178,"line":314},[176,2046,317],{"class":304},[176,2048,2049,2051,2053,2055,2057,2059,2061,2063,2065],{"class":178,"line":320},[176,2050,323],{"class":282},[176,2052,326],{"class":182},[176,2054,329],{"class":186},[176,2056,332],{"class":182},[176,2058,335],{"class":204},[176,2060,338],{"class":182},[176,2062,283],{"class":200},[176,2064,343],{"class":182},[176,2066,346],{"class":304},[176,2068,2069],{"class":178,"line":349},[176,2070,194],{"emptyLinePlaceholder":193},[176,2072,2073],{"class":178,"line":502},[176,2074,696],{"class":182},[176,2076,2077],{"class":178,"line":507},[176,2078,194],{"emptyLinePlaceholder":193},[176,2080,2081],{"class":178,"line":528},[176,2082,305],{"class":304},[176,2084,2085],{"class":178,"line":1543},[176,2086,2087],{"class":304},"     * 运行给定的查询以在 index 方法中获取实体。\n",[176,2089,2090],{"class":178,"line":1556},[176,2091,1540],{"class":304},[176,2093,2094,2096,2098,2100],{"class":178,"line":1561},[176,2095,1546],{"class":304},[176,2097,1777],{"class":1549},[176,2099,1781],{"class":1780},[176,2101,1784],{"class":304},[176,2103,2104,2106,2108,2111],{"class":178,"line":1576},[176,2105,1546],{"class":304},[176,2107,1777],{"class":1549},[176,2109,2110],{"class":1780}," Builder",[176,2112,2113],{"class":304}," $query\n",[176,2115,2116,2118,2120,2123],{"class":178,"line":1582},[176,2117,1546],{"class":304},[176,2119,1777],{"class":1549},[176,2121,2122],{"class":1549}," int",[176,2124,2125],{"class":304}," $paginationLimit\n",[176,2127,2128,2130,2132],{"class":178,"line":1598},[176,2129,1546],{"class":304},[176,2131,1550],{"class":1549},[176,2133,2134],{"class":1780}," LengthAwarePaginator\n",[176,2136,2137],{"class":178,"line":1604},[176,2138,317],{"class":304},[176,2140,2141,2143,2145,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2173,2175],{"class":178,"line":1879},[176,2142,323],{"class":282},[176,2144,685],{"class":282},[176,2146,2147],{"class":655}," runIndexFetchQuery",[176,2149,709],{"class":182},[176,2151,1823],{"class":204},[176,2153,326],{"class":182},[176,2155,1828],{"class":186},[176,2157,719],{"class":182},[176,2159,2110],{"class":204},[176,2161,326],{"class":182},[176,2163,1889],{"class":186},[176,2165,719],{"class":182},[176,2167,2122],{"class":200},[176,2169,326],{"class":182},[176,2171,2172],{"class":186},"paginationLimit",[176,2174,1840],{"class":182},[176,2176,2134],{"class":204},[176,2178,2179],{"class":178,"line":1884},[176,2180,1579],{"class":182},[176,2182,2183,2185,2187,2189,2191,2194,2196,2198,2200,2203,2205,2207,2209,2211,2213,2216,2218,2220,2222,2224,2226],{"class":178,"line":1909},[176,2184,1586],{"class":1585},[176,2186,326],{"class":182},[176,2188,1889],{"class":186},[176,2190,1892],{"class":182},[176,2192,2193],{"class":655},"paginate",[176,2195,1866],{"class":182},[176,2197,2172],{"class":186},[176,2199,719],{"class":182},[176,2201,2202],{"class":182}," [",[176,2204,662],{"class":182},[176,2206,1392],{"class":665},[176,2208,662],{"class":182},[176,2210,719],{"class":182},[176,2212,674],{"class":182},[176,2214,2215],{"class":665},"title",[176,2217,662],{"class":182},[176,2219,719],{"class":182},[176,2221,674],{"class":182},[176,2223,1902],{"class":665},[176,2225,662],{"class":182},[176,2227,2228],{"class":182},"]);\n",[176,2230,2231],{"class":178,"line":1914},[176,2232,1601],{"class":182},[176,2234,2235],{"class":178,"line":1925},[176,2236,352],{"class":182},[1617,2238,2239],{"id":2239},"执行操作",[156,2241,2242,2244,2245,2248,2249,2244,2252,2255],{},[173,2243,362],{},"、",[173,2246,2247],{},"show"," 等端点的主要目的是从数据库中检索数据，而不是修改数据。但 ",[173,2250,2251],{},"store",[173,2253,2254],{},"update"," 等端点会对数据库进行更改。你同样可以自定义某些操作（例如存储模型）的执行方式。",[156,2257,2258],{},"在下面的示例中，如果当前认证用户是管理员（这里的角色实现是虚构的），我们会对文章的属性进行强制填充：",[166,2260,2262],{"className":168,"code":2261,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n\n    ...\n\n    \u002F**\n     * 填充给定实体的属性并将其存储到数据库中。\n     *\n     * @param Request $request\n     * @param Model $entity\n     * @param array $attributes\n     *\u002F\n    protected function performStore(Request $request, Model $entity, array $attributes): void\n    {\n        if ($this->resolveUser()->hasRole('admin')) {\n            $entity->forceFill($attributes);\n        } else {\n            $entity->fill($attributes);\n        }\n        $entity->save();\n    }\n}\n",[173,2263,2264,2270,2274,2294,2298,2314,2334,2338,2348,2352,2356,2360,2364,2384,2388,2392,2396,2400,2405,2409,2419,2431,2442,2446,2486,2490,2521,2539,2549,2566,2571,2585,2590],{"__ignoreMap":171},[176,2265,2266,2268],{"class":178,"line":179},[176,2267,183],{"class":182},[176,2269,187],{"class":186},[176,2271,2272],{"class":178,"line":190},[176,2273,194],{"emptyLinePlaceholder":193},[176,2275,2276,2278,2280,2282,2284,2286,2288,2290,2292],{"class":178,"line":197},[176,2277,201],{"class":200},[176,2279,205],{"class":204},[176,2281,208],{"class":182},[176,2283,211],{"class":204},[176,2285,208],{"class":182},[176,2287,216],{"class":204},[176,2289,208],{"class":182},[176,2291,221],{"class":204},[176,2293,224],{"class":182},[176,2295,2296],{"class":178,"line":227},[176,2297,194],{"emptyLinePlaceholder":193},[176,2299,2300,2302,2304,2306,2308,2310,2312],{"class":178,"line":232},[176,2301,235],{"class":200},[176,2303,205],{"class":186},[176,2305,208],{"class":182},[176,2307,94],{"class":186},[176,2309,208],{"class":182},[176,2311,246],{"class":186},[176,2313,224],{"class":182},[176,2315,2316,2318,2320,2322,2324,2326,2328,2330,2332],{"class":178,"line":251},[176,2317,235],{"class":200},[176,2319,256],{"class":186},[176,2321,208],{"class":182},[176,2323,211],{"class":186},[176,2325,208],{"class":182},[176,2327,216],{"class":186},[176,2329,208],{"class":182},[176,2331,269],{"class":186},[176,2333,224],{"class":182},[176,2335,2336],{"class":178,"line":274},[176,2337,194],{"emptyLinePlaceholder":193},[176,2339,2340,2342,2344,2346],{"class":178,"line":279},[176,2341,283],{"class":282},[176,2343,286],{"class":204},[176,2345,289],{"class":282},[176,2347,292],{"class":204},[176,2349,2350],{"class":178,"line":295},[176,2351,298],{"class":182},[176,2353,2354],{"class":178,"line":301},[176,2355,305],{"class":304},[176,2357,2358],{"class":178,"line":308},[176,2359,311],{"class":304},[176,2361,2362],{"class":178,"line":314},[176,2363,317],{"class":304},[176,2365,2366,2368,2370,2372,2374,2376,2378,2380,2382],{"class":178,"line":320},[176,2367,323],{"class":282},[176,2369,326],{"class":182},[176,2371,329],{"class":186},[176,2373,332],{"class":182},[176,2375,335],{"class":204},[176,2377,338],{"class":182},[176,2379,283],{"class":200},[176,2381,343],{"class":182},[176,2383,346],{"class":304},[176,2385,2386],{"class":178,"line":349},[176,2387,194],{"emptyLinePlaceholder":193},[176,2389,2390],{"class":178,"line":502},[176,2391,696],{"class":182},[176,2393,2394],{"class":178,"line":507},[176,2395,194],{"emptyLinePlaceholder":193},[176,2397,2398],{"class":178,"line":528},[176,2399,305],{"class":304},[176,2401,2402],{"class":178,"line":1543},[176,2403,2404],{"class":304},"     * 填充给定实体的属性并将其存储到数据库中。\n",[176,2406,2407],{"class":178,"line":1556},[176,2408,1540],{"class":304},[176,2410,2411,2413,2415,2417],{"class":178,"line":1561},[176,2412,1546],{"class":304},[176,2414,1777],{"class":1549},[176,2416,1781],{"class":1780},[176,2418,1784],{"class":304},[176,2420,2421,2423,2425,2428],{"class":178,"line":1576},[176,2422,1546],{"class":304},[176,2424,1777],{"class":1549},[176,2426,2427],{"class":1780}," Model",[176,2429,2430],{"class":304}," $entity\n",[176,2432,2433,2435,2437,2439],{"class":178,"line":1582},[176,2434,1546],{"class":304},[176,2436,1777],{"class":1549},[176,2438,1793],{"class":1549},[176,2440,2441],{"class":304}," $attributes\n",[176,2443,2444],{"class":178,"line":1598},[176,2445,317],{"class":304},[176,2447,2448,2450,2452,2455,2457,2459,2461,2463,2465,2467,2469,2472,2474,2476,2478,2481,2483],{"class":178,"line":1604},[176,2449,323],{"class":282},[176,2451,685],{"class":282},[176,2453,2454],{"class":655}," performStore",[176,2456,709],{"class":182},[176,2458,1823],{"class":204},[176,2460,326],{"class":182},[176,2462,1828],{"class":186},[176,2464,719],{"class":182},[176,2466,2427],{"class":204},[176,2468,326],{"class":182},[176,2470,2471],{"class":186},"entity",[176,2473,719],{"class":182},[176,2475,1793],{"class":200},[176,2477,326],{"class":182},[176,2479,2480],{"class":186},"attributes",[176,2482,1840],{"class":182},[176,2484,2485],{"class":200}," void\n",[176,2487,2488],{"class":178,"line":1879},[176,2489,1579],{"class":182},[176,2491,2492,2495,2498,2501,2504,2507,2509,2511,2514,2516,2519],{"class":178,"line":1884},[176,2493,2494],{"class":1585},"        if",[176,2496,2497],{"class":182}," ($this->",[176,2499,2500],{"class":655},"resolveUser",[176,2502,2503],{"class":182},"()->",[176,2505,2506],{"class":655},"hasRole",[176,2508,709],{"class":182},[176,2510,662],{"class":182},[176,2512,2513],{"class":665},"admin",[176,2515,662],{"class":182},[176,2517,2518],{"class":182},"))",[176,2520,691],{"class":182},[176,2522,2523,2526,2528,2530,2533,2535,2537],{"class":178,"line":1909},[176,2524,2525],{"class":182},"            $",[176,2527,2471],{"class":186},[176,2529,1892],{"class":182},[176,2531,2532],{"class":655},"forceFill",[176,2534,1866],{"class":182},[176,2536,2480],{"class":186},[176,2538,728],{"class":182},[176,2540,2541,2544,2547],{"class":178,"line":1914},[176,2542,2543],{"class":182},"        }",[176,2545,2546],{"class":1585}," else",[176,2548,691],{"class":182},[176,2550,2551,2553,2555,2557,2560,2562,2564],{"class":178,"line":1925},[176,2552,2525],{"class":182},[176,2554,2471],{"class":186},[176,2556,1892],{"class":182},[176,2558,2559],{"class":655},"fill",[176,2561,1866],{"class":182},[176,2563,2480],{"class":186},[176,2565,728],{"class":182},[176,2567,2568],{"class":178,"line":1930},[176,2569,2570],{"class":182},"        }\n",[176,2572,2574,2576,2578,2580,2583],{"class":178,"line":2573},31,[176,2575,1851],{"class":182},[176,2577,2471],{"class":186},[176,2579,1892],{"class":182},[176,2581,2582],{"class":655},"save",[176,2584,1253],{"class":182},[176,2586,2588],{"class":178,"line":2587},32,[176,2589,1601],{"class":182},[176,2591,2593],{"class":178,"line":2592},33,[176,2594,352],{"class":182},[532,2596,2597],{"icon":534},[156,2598,2599,2600,2603],{},"你还可以通过重写 ",[173,2601,2602],{},"performFill"," 方法来自定义属性在模型上的填充方式。",[354,2605,2606],{"id":2606},"针对一组端点",[156,2608,2609,2610,2612,2613,2615,2616,2619],{},"很好，现在 ",[173,2611,362],{}," 端点只返回已发布的文章。但如果你希望对 ",[173,2614,2247],{}," 端点也应用相同的约束呢？当然，我们可以复制这段逻辑并重写 ",[173,2617,2618],{},"buildShowFetchQuery"," 方法，但还有更好的办法。",[1617,2621,1619],{"id":2622},"构建查询-1",[156,2624,2625,2626,2628,2629,2632,2633,2244,2635,2244,2637,2244,2639,1268,2642,2644],{},"如果你查看 ",[173,2627,1628],{}," 方法的实现，会注意到它使用了 ",[173,2630,2631],{},"buildFetchQuery"," 方法。实际上，",[173,2634,362],{},[173,2636,2247],{},[173,2638,2254],{},[173,2640,2641],{},"destroy",[173,2643,1267],{}," 端点都使用这个方法来构建获取模型的查询，而你同样可以重写它！",[156,2646,2647,2648,1268,2650,2652,2653,2244,2655,1268,2657,2659],{},"如果你希望同时对 ",[173,2649,362],{},[173,2651,2247],{}," 端点（以及 ",[173,2654,2254],{},[173,2656,2641],{},[173,2658,1267],{},"）应用相同的约束，代码如下：",[166,2661,2663],{"className":168,"code":2662,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n\n    \u002F**\n     * 构建用于获取实体的 Eloquent 查询。\n     *\n     * @param Request $request\n     * @param array $requestedRelations\n     * @return Builder\n     *\u002F\n    protected function buildFetchQuery(Request $request, array $requestedRelations): Builder\n    {\n        $query = parent::buildFetchQuery($request, $requestedRelations);\n\n        $query->whereNotNull('published_at');\n\n        return $query;\n    }\n\n    ...\n}\n",[173,2664,2665,2671,2675,2695,2699,2715,2735,2739,2749,2753,2757,2761,2765,2785,2789,2793,2798,2802,2812,2822,2830,2834,2863,2867,2893,2897,2917,2921,2931,2935,2939,2943],{"__ignoreMap":171},[176,2666,2667,2669],{"class":178,"line":179},[176,2668,183],{"class":182},[176,2670,187],{"class":186},[176,2672,2673],{"class":178,"line":190},[176,2674,194],{"emptyLinePlaceholder":193},[176,2676,2677,2679,2681,2683,2685,2687,2689,2691,2693],{"class":178,"line":197},[176,2678,201],{"class":200},[176,2680,205],{"class":204},[176,2682,208],{"class":182},[176,2684,211],{"class":204},[176,2686,208],{"class":182},[176,2688,216],{"class":204},[176,2690,208],{"class":182},[176,2692,221],{"class":204},[176,2694,224],{"class":182},[176,2696,2697],{"class":178,"line":227},[176,2698,194],{"emptyLinePlaceholder":193},[176,2700,2701,2703,2705,2707,2709,2711,2713],{"class":178,"line":232},[176,2702,235],{"class":200},[176,2704,205],{"class":186},[176,2706,208],{"class":182},[176,2708,94],{"class":186},[176,2710,208],{"class":182},[176,2712,246],{"class":186},[176,2714,224],{"class":182},[176,2716,2717,2719,2721,2723,2725,2727,2729,2731,2733],{"class":178,"line":251},[176,2718,235],{"class":200},[176,2720,256],{"class":186},[176,2722,208],{"class":182},[176,2724,211],{"class":186},[176,2726,208],{"class":182},[176,2728,216],{"class":186},[176,2730,208],{"class":182},[176,2732,269],{"class":186},[176,2734,224],{"class":182},[176,2736,2737],{"class":178,"line":274},[176,2738,194],{"emptyLinePlaceholder":193},[176,2740,2741,2743,2745,2747],{"class":178,"line":279},[176,2742,283],{"class":282},[176,2744,286],{"class":204},[176,2746,289],{"class":282},[176,2748,292],{"class":204},[176,2750,2751],{"class":178,"line":295},[176,2752,298],{"class":182},[176,2754,2755],{"class":178,"line":301},[176,2756,305],{"class":304},[176,2758,2759],{"class":178,"line":308},[176,2760,311],{"class":304},[176,2762,2763],{"class":178,"line":314},[176,2764,317],{"class":304},[176,2766,2767,2769,2771,2773,2775,2777,2779,2781,2783],{"class":178,"line":320},[176,2768,323],{"class":282},[176,2770,326],{"class":182},[176,2772,329],{"class":186},[176,2774,332],{"class":182},[176,2776,335],{"class":204},[176,2778,338],{"class":182},[176,2780,283],{"class":200},[176,2782,343],{"class":182},[176,2784,346],{"class":304},[176,2786,2787],{"class":178,"line":349},[176,2788,194],{"emptyLinePlaceholder":193},[176,2790,2791],{"class":178,"line":502},[176,2792,305],{"class":304},[176,2794,2795],{"class":178,"line":507},[176,2796,2797],{"class":304},"     * 构建用于获取实体的 Eloquent 查询。\n",[176,2799,2800],{"class":178,"line":528},[176,2801,1540],{"class":304},[176,2803,2804,2806,2808,2810],{"class":178,"line":1543},[176,2805,1546],{"class":304},[176,2807,1777],{"class":1549},[176,2809,1781],{"class":1780},[176,2811,1784],{"class":304},[176,2813,2814,2816,2818,2820],{"class":178,"line":1556},[176,2815,1546],{"class":304},[176,2817,1777],{"class":1549},[176,2819,1793],{"class":1549},[176,2821,1796],{"class":304},[176,2823,2824,2826,2828],{"class":178,"line":1561},[176,2825,1546],{"class":304},[176,2827,1550],{"class":1549},[176,2829,1805],{"class":1780},[176,2831,2832],{"class":178,"line":1576},[176,2833,317],{"class":304},[176,2835,2836,2838,2840,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861],{"class":178,"line":1582},[176,2837,323],{"class":282},[176,2839,685],{"class":282},[176,2841,2842],{"class":655}," buildFetchQuery",[176,2844,709],{"class":182},[176,2846,1823],{"class":204},[176,2848,326],{"class":182},[176,2850,1828],{"class":186},[176,2852,719],{"class":182},[176,2854,1793],{"class":200},[176,2856,326],{"class":182},[176,2858,1837],{"class":186},[176,2860,1840],{"class":182},[176,2862,1805],{"class":204},[176,2864,2865],{"class":178,"line":1598},[176,2866,1579],{"class":182},[176,2868,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891],{"class":178,"line":1604},[176,2870,1851],{"class":182},[176,2872,1854],{"class":186},[176,2874,332],{"class":182},[176,2876,1859],{"class":282},[176,2878,338],{"class":182},[176,2880,2631],{"class":655},[176,2882,1866],{"class":182},[176,2884,1828],{"class":186},[176,2886,719],{"class":182},[176,2888,326],{"class":182},[176,2890,1837],{"class":186},[176,2892,728],{"class":182},[176,2894,2895],{"class":178,"line":1879},[176,2896,194],{"emptyLinePlaceholder":193},[176,2898,2899,2901,2903,2905,2907,2909,2911,2913,2915],{"class":178,"line":1884},[176,2900,1851],{"class":182},[176,2902,1889],{"class":186},[176,2904,1892],{"class":182},[176,2906,1895],{"class":655},[176,2908,709],{"class":182},[176,2910,662],{"class":182},[176,2912,1902],{"class":665},[176,2914,662],{"class":182},[176,2916,728],{"class":182},[176,2918,2919],{"class":178,"line":1909},[176,2920,194],{"emptyLinePlaceholder":193},[176,2922,2923,2925,2927,2929],{"class":178,"line":1914},[176,2924,1586],{"class":1585},[176,2926,326],{"class":182},[176,2928,1889],{"class":186},[176,2930,224],{"class":182},[176,2932,2933],{"class":178,"line":1925},[176,2934,1601],{"class":182},[176,2936,2937],{"class":178,"line":1930},[176,2938,194],{"emptyLinePlaceholder":193},[176,2940,2941],{"class":178,"line":2573},[176,2942,696],{"class":182},[176,2944,2945],{"class":178,"line":2587},[176,2946,352],{"class":182},[1617,2948,1935],{"id":2949},"运行查询-1",[156,2951,2952,2953,2955,2956,2244,2958,2244,2960,1268,2962,2964,2965,2968],{},"在运行查询方面，",[173,2954,362],{}," 端点算是一个例外（因为它获取的是模型列表，而不是单个模型），而 ",[173,2957,2247],{},[173,2959,2254],{},[173,2961,2641],{},[173,2963,1267],{}," 端点共享相同的逻辑，底层都使用 ",[173,2966,2967],{},"runFetchQuery","。",[156,2970,2971,2972,2244,2974,1268,2976,2978],{},"稍加重构后，我们就得到了这样一个控制器：只获取已发布的博客文章，并且只从数据库中检索 ",[173,2973,1392],{},[173,2975,2215],{},[173,2977,1902],{}," 这几个列（属性）。",[166,2980,2982],{"className":168,"code":2981,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * 模型的完全限定类名\n     *\u002F\n    protected $model = Post::class; \u002F\u002F 或 \"App\\Models\\Post\"\n\n    \u002F**\n     * 要从数据库中选择的属性列表\n     *\u002F\n    protected $attributes = ['id', 'title', 'published_at'];\n\n    \u002F**\n     * 构建用于获取实体的 Eloquent 查询。\n     *\n     * @param Request $request\n     * @param array $requestedRelations\n     * @return Builder\n     *\u002F\n    protected function buildFetchQuery(Request $request, array $requestedRelations): Builder\n    {\n        $query = parent::buildFetchQuery($request, $requestedRelations);\n\n        $query->whereNotNull('published_at');\n\n        return $query;\n    }\n\n    \u002F**\n     * 运行给定的查询以获取实体。\n     *\n     * @param Request $request\n     * @param Builder $query\n     * @param int|string $key\n     * @return Model\n     *\u002F\n    protected function runFetchQuery(Request $request, Builder $query, $key): Model\n    {\n        return $query->select($this->attributes)->findOrFail($key);\n    }\n\n    \u002F**\n     * 运行给定的查询以在 index 方法中获取实体。\n     *\n     * @param Request $request\n     * @param Builder $query\n     * @param int $paginationLimit\n     * @return LengthAwarePaginator\n     *\u002F\n    protected function runIndexFetchQuery(Request $request, Builder $query, int $paginationLimit): LengthAwarePaginator\n    {\n        return $query->paginate($paginationLimit, $this->attributes);\n    }\n\n    \u002F**\n     * 填充给定实体的属性并将其存储到数据库中。\n     *\n     * @param Request $request\n     * @param Model $post\n     * @param array $attributes\n     *\u002F\n    protected function performStore(Request $request, Model $post, array $attributes): void\n    {\n        if ($this->resolveUser()->hasRole('admin')) {\n            $post->forceFill($attributes);\n        } else {\n            $post->fill($attributes);\n        }\n        $post->save();\n    }\n}\n",[173,2983,2984,2990,2994,3014,3018,3034,3054,3058,3068,3072,3076,3080,3084,3104,3108,3112,3117,3121,3159,3163,3167,3171,3175,3185,3195,3203,3207,3235,3239,3265,3269,3289,3293,3303,3308,3313,3318,3324,3329,3340,3351,3368,3378,3383,3420,3425,3455,3460,3465,3470,3475,3480,3491,3502,3513,3522,3527,3564,3569,3595,3600,3605,3610,3615,3620,3631,3643,3654,3659,3697,3702,3727,3744,3753,3770,3775,3788,3793],{"__ignoreMap":171},[176,2985,2986,2988],{"class":178,"line":179},[176,2987,183],{"class":182},[176,2989,187],{"class":186},[176,2991,2992],{"class":178,"line":190},[176,2993,194],{"emptyLinePlaceholder":193},[176,2995,2996,2998,3000,3002,3004,3006,3008,3010,3012],{"class":178,"line":197},[176,2997,201],{"class":200},[176,2999,205],{"class":204},[176,3001,208],{"class":182},[176,3003,211],{"class":204},[176,3005,208],{"class":182},[176,3007,216],{"class":204},[176,3009,208],{"class":182},[176,3011,221],{"class":204},[176,3013,224],{"class":182},[176,3015,3016],{"class":178,"line":227},[176,3017,194],{"emptyLinePlaceholder":193},[176,3019,3020,3022,3024,3026,3028,3030,3032],{"class":178,"line":232},[176,3021,235],{"class":200},[176,3023,205],{"class":186},[176,3025,208],{"class":182},[176,3027,94],{"class":186},[176,3029,208],{"class":182},[176,3031,246],{"class":186},[176,3033,224],{"class":182},[176,3035,3036,3038,3040,3042,3044,3046,3048,3050,3052],{"class":178,"line":251},[176,3037,235],{"class":200},[176,3039,256],{"class":186},[176,3041,208],{"class":182},[176,3043,211],{"class":186},[176,3045,208],{"class":182},[176,3047,216],{"class":186},[176,3049,208],{"class":182},[176,3051,269],{"class":186},[176,3053,224],{"class":182},[176,3055,3056],{"class":178,"line":274},[176,3057,194],{"emptyLinePlaceholder":193},[176,3059,3060,3062,3064,3066],{"class":178,"line":279},[176,3061,283],{"class":282},[176,3063,286],{"class":204},[176,3065,289],{"class":282},[176,3067,292],{"class":204},[176,3069,3070],{"class":178,"line":295},[176,3071,298],{"class":182},[176,3073,3074],{"class":178,"line":301},[176,3075,305],{"class":304},[176,3077,3078],{"class":178,"line":308},[176,3079,311],{"class":304},[176,3081,3082],{"class":178,"line":314},[176,3083,317],{"class":304},[176,3085,3086,3088,3090,3092,3094,3096,3098,3100,3102],{"class":178,"line":320},[176,3087,323],{"class":282},[176,3089,326],{"class":182},[176,3091,329],{"class":186},[176,3093,332],{"class":182},[176,3095,335],{"class":204},[176,3097,338],{"class":182},[176,3099,283],{"class":200},[176,3101,343],{"class":182},[176,3103,346],{"class":304},[176,3105,3106],{"class":178,"line":349},[176,3107,194],{"emptyLinePlaceholder":193},[176,3109,3110],{"class":178,"line":502},[176,3111,305],{"class":304},[176,3113,3114],{"class":178,"line":507},[176,3115,3116],{"class":304},"     * 要从数据库中选择的属性列表\n",[176,3118,3119],{"class":178,"line":528},[176,3120,317],{"class":304},[176,3122,3123,3125,3127,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156],{"class":178,"line":1543},[176,3124,323],{"class":282},[176,3126,326],{"class":182},[176,3128,3129],{"class":186},"attributes ",[176,3131,332],{"class":182},[176,3133,2202],{"class":182},[176,3135,662],{"class":182},[176,3137,1392],{"class":665},[176,3139,662],{"class":182},[176,3141,719],{"class":182},[176,3143,674],{"class":182},[176,3145,2215],{"class":665},[176,3147,662],{"class":182},[176,3149,719],{"class":182},[176,3151,674],{"class":182},[176,3153,1902],{"class":665},[176,3155,662],{"class":182},[176,3157,3158],{"class":182},"];\n",[176,3160,3161],{"class":178,"line":1556},[176,3162,194],{"emptyLinePlaceholder":193},[176,3164,3165],{"class":178,"line":1561},[176,3166,305],{"class":304},[176,3168,3169],{"class":178,"line":1576},[176,3170,2797],{"class":304},[176,3172,3173],{"class":178,"line":1582},[176,3174,1540],{"class":304},[176,3176,3177,3179,3181,3183],{"class":178,"line":1598},[176,3178,1546],{"class":304},[176,3180,1777],{"class":1549},[176,3182,1781],{"class":1780},[176,3184,1784],{"class":304},[176,3186,3187,3189,3191,3193],{"class":178,"line":1604},[176,3188,1546],{"class":304},[176,3190,1777],{"class":1549},[176,3192,1793],{"class":1549},[176,3194,1796],{"class":304},[176,3196,3197,3199,3201],{"class":178,"line":1879},[176,3198,1546],{"class":304},[176,3200,1550],{"class":1549},[176,3202,1805],{"class":1780},[176,3204,3205],{"class":178,"line":1884},[176,3206,317],{"class":304},[176,3208,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233],{"class":178,"line":1909},[176,3210,323],{"class":282},[176,3212,685],{"class":282},[176,3214,2842],{"class":655},[176,3216,709],{"class":182},[176,3218,1823],{"class":204},[176,3220,326],{"class":182},[176,3222,1828],{"class":186},[176,3224,719],{"class":182},[176,3226,1793],{"class":200},[176,3228,326],{"class":182},[176,3230,1837],{"class":186},[176,3232,1840],{"class":182},[176,3234,1805],{"class":204},[176,3236,3237],{"class":178,"line":1914},[176,3238,1579],{"class":182},[176,3240,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263],{"class":178,"line":1925},[176,3242,1851],{"class":182},[176,3244,1854],{"class":186},[176,3246,332],{"class":182},[176,3248,1859],{"class":282},[176,3250,338],{"class":182},[176,3252,2631],{"class":655},[176,3254,1866],{"class":182},[176,3256,1828],{"class":186},[176,3258,719],{"class":182},[176,3260,326],{"class":182},[176,3262,1837],{"class":186},[176,3264,728],{"class":182},[176,3266,3267],{"class":178,"line":1930},[176,3268,194],{"emptyLinePlaceholder":193},[176,3270,3271,3273,3275,3277,3279,3281,3283,3285,3287],{"class":178,"line":2573},[176,3272,1851],{"class":182},[176,3274,1889],{"class":186},[176,3276,1892],{"class":182},[176,3278,1895],{"class":655},[176,3280,709],{"class":182},[176,3282,662],{"class":182},[176,3284,1902],{"class":665},[176,3286,662],{"class":182},[176,3288,728],{"class":182},[176,3290,3291],{"class":178,"line":2587},[176,3292,194],{"emptyLinePlaceholder":193},[176,3294,3295,3297,3299,3301],{"class":178,"line":2592},[176,3296,1586],{"class":1585},[176,3298,326],{"class":182},[176,3300,1889],{"class":186},[176,3302,224],{"class":182},[176,3304,3306],{"class":178,"line":3305},34,[176,3307,1601],{"class":182},[176,3309,3311],{"class":178,"line":3310},35,[176,3312,194],{"emptyLinePlaceholder":193},[176,3314,3316],{"class":178,"line":3315},36,[176,3317,305],{"class":304},[176,3319,3321],{"class":178,"line":3320},37,[176,3322,3323],{"class":304},"     * 运行给定的查询以获取实体。\n",[176,3325,3327],{"class":178,"line":3326},38,[176,3328,1540],{"class":304},[176,3330,3332,3334,3336,3338],{"class":178,"line":3331},39,[176,3333,1546],{"class":304},[176,3335,1777],{"class":1549},[176,3337,1781],{"class":1780},[176,3339,1784],{"class":304},[176,3341,3343,3345,3347,3349],{"class":178,"line":3342},40,[176,3344,1546],{"class":304},[176,3346,1777],{"class":1549},[176,3348,2110],{"class":1780},[176,3350,2113],{"class":304},[176,3352,3354,3356,3358,3360,3362,3365],{"class":178,"line":3353},41,[176,3355,1546],{"class":304},[176,3357,1777],{"class":1549},[176,3359,2122],{"class":1549},[176,3361,765],{"class":1585},[176,3363,3364],{"class":1549},"string",[176,3366,3367],{"class":304}," $key\n",[176,3369,3371,3373,3375],{"class":178,"line":3370},42,[176,3372,1546],{"class":304},[176,3374,1550],{"class":1549},[176,3376,3377],{"class":1780}," Model\n",[176,3379,3381],{"class":178,"line":3380},43,[176,3382,317],{"class":304},[176,3384,3386,3388,3390,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3416,3418],{"class":178,"line":3385},44,[176,3387,323],{"class":282},[176,3389,685],{"class":282},[176,3391,3392],{"class":655}," runFetchQuery",[176,3394,709],{"class":182},[176,3396,1823],{"class":204},[176,3398,326],{"class":182},[176,3400,1828],{"class":186},[176,3402,719],{"class":182},[176,3404,2110],{"class":204},[176,3406,326],{"class":182},[176,3408,1889],{"class":186},[176,3410,719],{"class":182},[176,3412,326],{"class":182},[176,3414,3415],{"class":186},"key",[176,3417,1840],{"class":182},[176,3419,3377],{"class":204},[176,3421,3423],{"class":178,"line":3422},45,[176,3424,1579],{"class":182},[176,3426,3428,3430,3432,3434,3436,3439,3442,3444,3446,3449,3451,3453],{"class":178,"line":3427},46,[176,3429,1586],{"class":1585},[176,3431,326],{"class":182},[176,3433,1889],{"class":186},[176,3435,1892],{"class":182},[176,3437,3438],{"class":655},"select",[176,3440,3441],{"class":182},"($this->",[176,3443,2480],{"class":186},[176,3445,1248],{"class":182},[176,3447,3448],{"class":655},"findOrFail",[176,3450,1866],{"class":182},[176,3452,3415],{"class":186},[176,3454,728],{"class":182},[176,3456,3458],{"class":178,"line":3457},47,[176,3459,1601],{"class":182},[176,3461,3463],{"class":178,"line":3462},48,[176,3464,194],{"emptyLinePlaceholder":193},[176,3466,3468],{"class":178,"line":3467},49,[176,3469,305],{"class":304},[176,3471,3473],{"class":178,"line":3472},50,[176,3474,2087],{"class":304},[176,3476,3478],{"class":178,"line":3477},51,[176,3479,1540],{"class":304},[176,3481,3483,3485,3487,3489],{"class":178,"line":3482},52,[176,3484,1546],{"class":304},[176,3486,1777],{"class":1549},[176,3488,1781],{"class":1780},[176,3490,1784],{"class":304},[176,3492,3494,3496,3498,3500],{"class":178,"line":3493},53,[176,3495,1546],{"class":304},[176,3497,1777],{"class":1549},[176,3499,2110],{"class":1780},[176,3501,2113],{"class":304},[176,3503,3505,3507,3509,3511],{"class":178,"line":3504},54,[176,3506,1546],{"class":304},[176,3508,1777],{"class":1549},[176,3510,2122],{"class":1549},[176,3512,2125],{"class":304},[176,3514,3516,3518,3520],{"class":178,"line":3515},55,[176,3517,1546],{"class":304},[176,3519,1550],{"class":1549},[176,3521,2134],{"class":1780},[176,3523,3525],{"class":178,"line":3524},56,[176,3526,317],{"class":304},[176,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562],{"class":178,"line":3529},57,[176,3531,323],{"class":282},[176,3533,685],{"class":282},[176,3535,2147],{"class":655},[176,3537,709],{"class":182},[176,3539,1823],{"class":204},[176,3541,326],{"class":182},[176,3543,1828],{"class":186},[176,3545,719],{"class":182},[176,3547,2110],{"class":204},[176,3549,326],{"class":182},[176,3551,1889],{"class":186},[176,3553,719],{"class":182},[176,3555,2122],{"class":200},[176,3557,326],{"class":182},[176,3559,2172],{"class":186},[176,3561,1840],{"class":182},[176,3563,2134],{"class":204},[176,3565,3567],{"class":178,"line":3566},58,[176,3568,1579],{"class":182},[176,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3591,3593],{"class":178,"line":3571},59,[176,3573,1586],{"class":1585},[176,3575,326],{"class":182},[176,3577,1889],{"class":186},[176,3579,1892],{"class":182},[176,3581,2193],{"class":655},[176,3583,1866],{"class":182},[176,3585,2172],{"class":186},[176,3587,719],{"class":182},[176,3589,3590],{"class":182}," $this->",[176,3592,2480],{"class":186},[176,3594,728],{"class":182},[176,3596,3598],{"class":178,"line":3597},60,[176,3599,1601],{"class":182},[176,3601,3603],{"class":178,"line":3602},61,[176,3604,194],{"emptyLinePlaceholder":193},[176,3606,3608],{"class":178,"line":3607},62,[176,3609,305],{"class":304},[176,3611,3613],{"class":178,"line":3612},63,[176,3614,2404],{"class":304},[176,3616,3618],{"class":178,"line":3617},64,[176,3619,1540],{"class":304},[176,3621,3623,3625,3627,3629],{"class":178,"line":3622},65,[176,3624,1546],{"class":304},[176,3626,1777],{"class":1549},[176,3628,1781],{"class":1780},[176,3630,1784],{"class":304},[176,3632,3634,3636,3638,3640],{"class":178,"line":3633},66,[176,3635,1546],{"class":304},[176,3637,1777],{"class":1549},[176,3639,2427],{"class":1780},[176,3641,3642],{"class":304}," $post\n",[176,3644,3646,3648,3650,3652],{"class":178,"line":3645},67,[176,3647,1546],{"class":304},[176,3649,1777],{"class":1549},[176,3651,1793],{"class":1549},[176,3653,2441],{"class":304},[176,3655,3657],{"class":178,"line":3656},68,[176,3658,317],{"class":304},[176,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3685,3687,3689,3691,3693,3695],{"class":178,"line":3661},69,[176,3663,323],{"class":282},[176,3665,685],{"class":282},[176,3667,2454],{"class":655},[176,3669,709],{"class":182},[176,3671,1823],{"class":204},[176,3673,326],{"class":182},[176,3675,1828],{"class":186},[176,3677,719],{"class":182},[176,3679,2427],{"class":204},[176,3681,326],{"class":182},[176,3683,3684],{"class":186},"post",[176,3686,719],{"class":182},[176,3688,1793],{"class":200},[176,3690,326],{"class":182},[176,3692,2480],{"class":186},[176,3694,1840],{"class":182},[176,3696,2485],{"class":200},[176,3698,3700],{"class":178,"line":3699},70,[176,3701,1579],{"class":182},[176,3703,3705,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725],{"class":178,"line":3704},71,[176,3706,2494],{"class":1585},[176,3708,2497],{"class":182},[176,3710,2500],{"class":655},[176,3712,2503],{"class":182},[176,3714,2506],{"class":655},[176,3716,709],{"class":182},[176,3718,662],{"class":182},[176,3720,2513],{"class":665},[176,3722,662],{"class":182},[176,3724,2518],{"class":182},[176,3726,691],{"class":182},[176,3728,3730,3732,3734,3736,3738,3740,3742],{"class":178,"line":3729},72,[176,3731,2525],{"class":182},[176,3733,3684],{"class":186},[176,3735,1892],{"class":182},[176,3737,2532],{"class":655},[176,3739,1866],{"class":182},[176,3741,2480],{"class":186},[176,3743,728],{"class":182},[176,3745,3747,3749,3751],{"class":178,"line":3746},73,[176,3748,2543],{"class":182},[176,3750,2546],{"class":1585},[176,3752,691],{"class":182},[176,3754,3756,3758,3760,3762,3764,3766,3768],{"class":178,"line":3755},74,[176,3757,2525],{"class":182},[176,3759,3684],{"class":186},[176,3761,1892],{"class":182},[176,3763,2559],{"class":655},[176,3765,1866],{"class":182},[176,3767,2480],{"class":186},[176,3769,728],{"class":182},[176,3771,3773],{"class":178,"line":3772},75,[176,3774,2570],{"class":182},[176,3776,3778,3780,3782,3784,3786],{"class":178,"line":3777},76,[176,3779,1851],{"class":182},[176,3781,3684],{"class":186},[176,3783,1892],{"class":182},[176,3785,2582],{"class":655},[176,3787,1253],{"class":182},[176,3789,3791],{"class":178,"line":3790},77,[176,3792,1601],{"class":182},[176,3794,3796],{"class":178,"line":3795},78,[176,3797,352],{"class":182},[354,3799,3800],{"id":3800},"标准操作方法",[3802,3803,3804,3823],"table",{},[3805,3806,3807],"thead",{},[3808,3809,3810,3814,3817,3820],"tr",{},[3811,3812,3813],"th",{},"方法",[3811,3815,3816],{},"构建",[3811,3818,3819],{},"运行",[3811,3821,3822],{},"执行",[3824,3825,3826,3838,3851,3862,3875,3888],"tbody",{},[3808,3827,3828,3831,3833,3835],{},[3829,3830,362],"td",{},[3829,3832,1628],{},[3829,3834,1941],{},[3829,3836,3837],{},"-",[3808,3839,3840,3842,3845,3848],{},[3829,3841,2251],{},[3829,3843,3844],{},"buildStoreFetchQuery",[3829,3846,3847],{},"runStoreFetchQuery",[3829,3849,3850],{},"performStore",[3808,3852,3853,3855,3857,3860],{},[3829,3854,2247],{},[3829,3856,2618],{},[3829,3858,3859],{},"runShowFetchQuery",[3829,3861,3837],{},[3808,3863,3864,3866,3869,3872],{},[3829,3865,2254],{},[3829,3867,3868],{},"buildUpdateFetchQuery",[3829,3870,3871],{},"runUpdateFetchQuery",[3829,3873,3874],{},"performUpdate",[3808,3876,3877,3879,3882,3885],{},[3829,3878,2641],{},[3829,3880,3881],{},"buildDestroyFetchQuery",[3829,3883,3884],{},"runDestroyFetchQuery",[3829,3886,3887],{},"performDestroy",[3808,3889,3890,3892,3895,3898],{},[3829,3891,1267],{},[3829,3893,3894],{},"buildRestoreFetchQuery",[3829,3896,3897],{},"runRestoreFetchQuery",[3829,3899,3900],{},"performRestore",[3902,3903,3904],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .svl4J, html code.shiki .svl4J{--shiki-light:#F76D47;--shiki-light-font-style:italic;--shiki-default:#F78C6C;--shiki-default-font-style:italic;--shiki-dark:#F78C6C;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sFweD, html code.shiki .sFweD{--shiki-light:#E2931D;--shiki-light-font-style:italic;--shiki-default:#FFCB6B;--shiki-default-font-style:italic;--shiki-dark:#FFCB6B;--shiki-dark-font-style:italic}",{"title":171,"searchDepth":179,"depth":190,"links":3906},[3907,3910,3913,3914],{"id":154,"depth":190,"text":154,"children":3908},[3909],{"id":356,"depth":197,"text":356},{"id":562,"depth":190,"text":562,"children":3911},[3912],{"id":1118,"depth":197,"text":1118},{"id":1386,"depth":190,"text":1386},{"id":1609,"depth":190,"text":1609,"children":3915},[3916,3917,3918],{"id":1615,"depth":197,"text":1615},{"id":2606,"depth":197,"text":2606},{"id":3800,"depth":197,"text":3800},"了解如何通过 API 暴露模型。","md",null,{},{"title":20,"description":3919},"GqGDJyf3Rw32zW3JTq7pyDi-2aAdbzFCt2Xy9S9urko",[3926,3928],{"title":16,"path":17,"stem":18,"description":3927,"children":-1},"迈出使用 Orion 的第一步。",{"title":24,"path":25,"stem":26,"description":3929,"children":-1},"了解如何通过 API 暴露模型关联。",{"id":3931,"title":94,"body":3932,"description":7353,"extension":3920,"links":3921,"meta":7354,"navigation":193,"path":7355,"seo":7356,"stem":7357,"__hash__":7358},"docs_en\u002F1.guide\u002F03.models.md",{"type":149,"value":3933,"toc":7339},[3934,3938,3946,4077,4081,4090,4247,4270,4274,4277,4421,4430,4728,4732,4741,4869,4882,4982,4986,4995,5185,5189,5192,5196,5200,5208,5486,5490,5496,5780,5784,5800,5803,6115,6123,6127,6136,6139,6160,6175,6461,6464,6482,6492,7253,7257,7337],[152,3935,3937],{"id":3936},"setting-up-controller","Setting up Controller",[156,3939,3940,3941,3945],{},"To expose a model through the API, first you need to create a controller for it. As you may have seen in the ",[160,3942,3944],{"href":3943},"\u002Fguide\u002Fgetting-started#simple-crud","Getting Started - Simple CRUD"," section, defining a model controller is pretty straightforward.",[166,3947,3949],{"className":168,"code":3948,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n}\n",[173,3950,3951,3957,3961,3981,3985,4001,4021,4025,4035,4039,4043,4048,4052,4073],{"__ignoreMap":171},[176,3952,3953,3955],{"class":178,"line":179},[176,3954,183],{"class":182},[176,3956,187],{"class":186},[176,3958,3959],{"class":178,"line":190},[176,3960,194],{"emptyLinePlaceholder":193},[176,3962,3963,3965,3967,3969,3971,3973,3975,3977,3979],{"class":178,"line":197},[176,3964,201],{"class":200},[176,3966,205],{"class":204},[176,3968,208],{"class":182},[176,3970,211],{"class":204},[176,3972,208],{"class":182},[176,3974,216],{"class":204},[176,3976,208],{"class":182},[176,3978,221],{"class":204},[176,3980,224],{"class":182},[176,3982,3983],{"class":178,"line":227},[176,3984,194],{"emptyLinePlaceholder":193},[176,3986,3987,3989,3991,3993,3995,3997,3999],{"class":178,"line":232},[176,3988,235],{"class":200},[176,3990,205],{"class":186},[176,3992,208],{"class":182},[176,3994,94],{"class":186},[176,3996,208],{"class":182},[176,3998,246],{"class":186},[176,4000,224],{"class":182},[176,4002,4003,4005,4007,4009,4011,4013,4015,4017,4019],{"class":178,"line":251},[176,4004,235],{"class":200},[176,4006,256],{"class":186},[176,4008,208],{"class":182},[176,4010,211],{"class":186},[176,4012,208],{"class":182},[176,4014,216],{"class":186},[176,4016,208],{"class":182},[176,4018,269],{"class":186},[176,4020,224],{"class":182},[176,4022,4023],{"class":178,"line":274},[176,4024,194],{"emptyLinePlaceholder":193},[176,4026,4027,4029,4031,4033],{"class":178,"line":279},[176,4028,283],{"class":282},[176,4030,286],{"class":204},[176,4032,289],{"class":282},[176,4034,292],{"class":204},[176,4036,4037],{"class":178,"line":295},[176,4038,298],{"class":182},[176,4040,4041],{"class":178,"line":301},[176,4042,305],{"class":304},[176,4044,4045],{"class":178,"line":308},[176,4046,4047],{"class":304},"     * Fully-qualified model class name\n",[176,4049,4050],{"class":178,"line":314},[176,4051,317],{"class":304},[176,4053,4054,4056,4058,4060,4062,4064,4066,4068,4070],{"class":178,"line":320},[176,4055,323],{"class":282},[176,4057,326],{"class":182},[176,4059,329],{"class":186},[176,4061,332],{"class":182},[176,4063,335],{"class":204},[176,4065,338],{"class":182},[176,4067,283],{"class":200},[176,4069,343],{"class":182},[176,4071,4072],{"class":304}," \u002F\u002F or \"App\\Models\\Post\"\n",[176,4074,4075],{"class":178,"line":349},[176,4076,352],{"class":182},[354,4078,4080],{"id":4079},"disabling-pagination","Disabling Pagination",[156,4082,4083,4084,4086,4087,4089],{},"By default, resources returned by the ",[173,4085,362],{}," endpoint are paginated. To disable the pagination and return all resources, you can use the ",[173,4088,366],{}," trait.",[166,4091,4093],{"className":168,"code":4092,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\nuse Orion\\Concerns\\DisablePagination;\n\nclass PostsController extends Controller\n{\n    use DisablePagination;\n\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n}\n",[173,4094,4095,4101,4105,4125,4129,4145,4165,4181,4185,4195,4199,4207,4211,4215,4219,4223,4243],{"__ignoreMap":171},[176,4096,4097,4099],{"class":178,"line":179},[176,4098,183],{"class":182},[176,4100,187],{"class":186},[176,4102,4103],{"class":178,"line":190},[176,4104,194],{"emptyLinePlaceholder":193},[176,4106,4107,4109,4111,4113,4115,4117,4119,4121,4123],{"class":178,"line":197},[176,4108,201],{"class":200},[176,4110,205],{"class":204},[176,4112,208],{"class":182},[176,4114,211],{"class":204},[176,4116,208],{"class":182},[176,4118,216],{"class":204},[176,4120,208],{"class":182},[176,4122,221],{"class":204},[176,4124,224],{"class":182},[176,4126,4127],{"class":178,"line":227},[176,4128,194],{"emptyLinePlaceholder":193},[176,4130,4131,4133,4135,4137,4139,4141,4143],{"class":178,"line":232},[176,4132,235],{"class":200},[176,4134,205],{"class":186},[176,4136,208],{"class":182},[176,4138,94],{"class":186},[176,4140,208],{"class":182},[176,4142,246],{"class":186},[176,4144,224],{"class":182},[176,4146,4147,4149,4151,4153,4155,4157,4159,4161,4163],{"class":178,"line":251},[176,4148,235],{"class":200},[176,4150,256],{"class":186},[176,4152,208],{"class":182},[176,4154,211],{"class":186},[176,4156,208],{"class":182},[176,4158,216],{"class":186},[176,4160,208],{"class":182},[176,4162,269],{"class":186},[176,4164,224],{"class":182},[176,4166,4167,4169,4171,4173,4175,4177,4179],{"class":178,"line":274},[176,4168,235],{"class":200},[176,4170,256],{"class":186},[176,4172,208],{"class":182},[176,4174,453],{"class":186},[176,4176,208],{"class":182},[176,4178,366],{"class":186},[176,4180,224],{"class":182},[176,4182,4183],{"class":178,"line":279},[176,4184,194],{"emptyLinePlaceholder":193},[176,4186,4187,4189,4191,4193],{"class":178,"line":295},[176,4188,283],{"class":282},[176,4190,286],{"class":204},[176,4192,289],{"class":282},[176,4194,292],{"class":204},[176,4196,4197],{"class":178,"line":301},[176,4198,298],{"class":182},[176,4200,4201,4203,4205],{"class":178,"line":308},[176,4202,482],{"class":200},[176,4204,485],{"class":186},[176,4206,224],{"class":182},[176,4208,4209],{"class":178,"line":314},[176,4210,194],{"emptyLinePlaceholder":193},[176,4212,4213],{"class":178,"line":320},[176,4214,305],{"class":304},[176,4216,4217],{"class":178,"line":349},[176,4218,4047],{"class":304},[176,4220,4221],{"class":178,"line":502},[176,4222,317],{"class":304},[176,4224,4225,4227,4229,4231,4233,4235,4237,4239,4241],{"class":178,"line":507},[176,4226,323],{"class":282},[176,4228,326],{"class":182},[176,4230,329],{"class":186},[176,4232,332],{"class":182},[176,4234,335],{"class":204},[176,4236,338],{"class":182},[176,4238,283],{"class":200},[176,4240,343],{"class":182},[176,4242,4072],{"class":304},[176,4244,4245],{"class":178,"line":528},[176,4246,352],{"class":182},[532,4248,4249,4252],{"icon":534},[156,4250,4251],{},"Key Takeaways",[539,4253,4254,4259,4264],{},[542,4255,4256,4257],{},"Model controllers always extend ",[173,4258,547],{},[542,4260,4261,4263],{},[173,4262,552],{}," property is set to a fully qualified model class name",[542,4265,4266,4267,4269],{},"Pagination can be disabled for both model and relation resources using the ",[173,4268,366],{}," trait",[152,4271,4273],{"id":4272},"setting-up-routes","Setting up Routes",[156,4275,4276],{},"Once the controller is created, it is time to register routes.",[166,4278,4279],{"className":168,"code":568,"language":170,"meta":171,"style":171},[173,4280,4281,4287,4291,4311,4327,4347,4351,4383,4387,4413,4417],{"__ignoreMap":171},[176,4282,4283,4285],{"class":178,"line":179},[176,4284,183],{"class":182},[176,4286,187],{"class":186},[176,4288,4289],{"class":178,"line":190},[176,4290,194],{"emptyLinePlaceholder":193},[176,4292,4293,4295,4297,4299,4301,4303,4305,4307,4309],{"class":178,"line":197},[176,4294,235],{"class":200},[176,4296,587],{"class":186},[176,4298,208],{"class":182},[176,4300,592],{"class":186},[176,4302,208],{"class":182},[176,4304,597],{"class":186},[176,4306,208],{"class":182},[176,4308,602],{"class":186},[176,4310,224],{"class":182},[176,4312,4313,4315,4317,4319,4321,4323,4325],{"class":178,"line":227},[176,4314,235],{"class":200},[176,4316,256],{"class":186},[176,4318,208],{"class":182},[176,4320,597],{"class":186},[176,4322,208],{"class":182},[176,4324,619],{"class":186},[176,4326,224],{"class":182},[176,4328,4329,4331,4333,4335,4337,4339,4341,4343,4345],{"class":178,"line":232},[176,4330,235],{"class":200},[176,4332,205],{"class":186},[176,4334,208],{"class":182},[176,4336,211],{"class":186},[176,4338,208],{"class":182},[176,4340,216],{"class":186},[176,4342,208],{"class":182},[176,4344,640],{"class":186},[176,4346,224],{"class":182},[176,4348,4349],{"class":178,"line":251},[176,4350,194],{"emptyLinePlaceholder":193},[176,4352,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381],{"class":178,"line":274},[176,4354,602],{"class":204},[176,4356,338],{"class":182},[176,4358,656],{"class":655},[176,4360,659],{"class":182},[176,4362,662],{"class":182},[176,4364,666],{"class":665},[176,4366,662],{"class":182},[176,4368,671],{"class":182},[176,4370,674],{"class":182},[176,4372,677],{"class":665},[176,4374,662],{"class":182},[176,4376,682],{"class":182},[176,4378,685],{"class":282},[176,4380,688],{"class":182},[176,4382,691],{"class":182},[176,4384,4385],{"class":178,"line":279},[176,4386,696],{"class":182},[176,4388,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411],{"class":178,"line":295},[176,4390,701],{"class":204},[176,4392,338],{"class":182},[176,4394,706],{"class":655},[176,4396,709],{"class":182},[176,4398,662],{"class":182},[176,4400,714],{"class":665},[176,4402,662],{"class":182},[176,4404,719],{"class":182},[176,4406,286],{"class":204},[176,4408,338],{"class":182},[176,4410,283],{"class":200},[176,4412,728],{"class":182},[176,4414,4415],{"class":178,"line":301},[176,4416,696],{"class":182},[176,4418,4419],{"class":178,"line":308},[176,4420,737],{"class":182},[156,4422,4423,4424,4426,4427,4429],{},"Essentially, ",[173,4425,743],{}," method is the same as Laravel's default ",[173,4428,747],{}," - it will create multiple routes to handle a variety of actions on the resource.",[166,4431,4432],{"className":751,"code":752,"language":753,"meta":171,"style":171},[173,4433,4434,4438,4466,4470,4474,4504,4530,4556,4590,4622,4650,4676,4702],{"__ignoreMap":171},[176,4435,4436],{"class":178,"line":179},[176,4437,760],{"class":204},[176,4439,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464],{"class":178,"line":190},[176,4441,765],{"class":182},[176,4443,768],{"class":204},[176,4445,771],{"class":182},[176,4447,774],{"class":204},[176,4449,777],{"class":182},[176,4451,780],{"class":204},[176,4453,783],{"class":182},[176,4455,786],{"class":204},[176,4457,789],{"class":182},[176,4459,792],{"class":204},[176,4461,795],{"class":182},[176,4463,798],{"class":204},[176,4465,801],{"class":182},[176,4467,4468],{"class":178,"line":197},[176,4469,760],{"class":204},[176,4471,4472],{"class":178,"line":227},[176,4473,810],{"class":655},[176,4475,4476,4478,4480,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502],{"class":178,"line":232},[176,4477,765],{"class":182},[176,4479,817],{"class":182},[176,4481,820],{"class":204},[176,4483,765],{"class":182},[176,4485,825],{"class":204},[176,4487,828],{"class":182},[176,4489,831],{"class":204},[176,4491,834],{"class":182},[176,4493,837],{"class":204},[176,4495,840],{"class":182},[176,4497,843],{"class":204},[176,4499,846],{"class":182},[176,4501,849],{"class":204},[176,4503,852],{"class":182},[176,4505,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528],{"class":178,"line":251},[176,4507,765],{"class":182},[176,4509,817],{"class":182},[176,4511,861],{"class":204},[176,4513,864],{"class":182},[176,4515,867],{"class":204},[176,4517,870],{"class":182},[176,4519,873],{"class":204},[176,4521,876],{"class":182},[176,4523,843],{"class":204},[176,4525,846],{"class":182},[176,4527,849],{"class":204},[176,4529,852],{"class":182},[176,4531,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554],{"class":178,"line":274},[176,4533,765],{"class":182},[176,4535,817],{"class":182},[176,4537,861],{"class":204},[176,4539,864],{"class":182},[176,4541,831],{"class":204},[176,4543,834],{"class":182},[176,4545,901],{"class":204},[176,4547,840],{"class":182},[176,4549,906],{"class":204},[176,4551,846],{"class":182},[176,4553,849],{"class":204},[176,4555,852],{"class":182},[176,4557,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588],{"class":178,"line":279},[176,4559,765],{"class":182},[176,4561,817],{"class":182},[176,4563,820],{"class":204},[176,4565,765],{"class":182},[176,4567,825],{"class":204},[176,4569,828],{"class":182},[176,4571,929],{"class":204},[176,4573,932],{"class":665},[176,4575,870],{"class":182},[176,4577,937],{"class":204},[176,4579,940],{"class":182},[176,4581,943],{"class":204},[176,4583,946],{"class":182},[176,4585,849],{"class":204},[176,4587,783],{"class":182},[176,4589,953],{"class":186},[176,4591,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620],{"class":178,"line":295},[176,4593,765],{"class":182},[176,4595,817],{"class":182},[176,4597,962],{"class":204},[176,4599,765],{"class":182},[176,4601,967],{"class":204},[176,4603,771],{"class":182},[176,4605,929],{"class":204},[176,4607,932],{"class":665},[176,4609,870],{"class":182},[176,4611,978],{"class":204},[176,4613,876],{"class":182},[176,4615,983],{"class":204},[176,4617,986],{"class":182},[176,4619,849],{"class":204},[176,4621,852],{"class":182},[176,4623,4624,4626,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648],{"class":178,"line":301},[176,4625,765],{"class":182},[176,4627,817],{"class":182},[176,4629,999],{"class":204},[176,4631,777],{"class":182},[176,4633,929],{"class":204},[176,4635,932],{"class":665},[176,4637,870],{"class":182},[176,4639,1010],{"class":204},[176,4641,1013],{"class":182},[176,4643,1016],{"class":204},[176,4645,1019],{"class":182},[176,4647,849],{"class":204},[176,4649,852],{"class":182},[176,4651,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674],{"class":178,"line":308},[176,4653,765],{"class":182},[176,4655,817],{"class":182},[176,4657,861],{"class":204},[176,4659,864],{"class":182},[176,4661,1036],{"class":204},[176,4663,1039],{"class":182},[176,4665,1042],{"class":204},[176,4667,1045],{"class":182},[176,4669,1048],{"class":204},[176,4671,876],{"class":182},[176,4673,849],{"class":204},[176,4675,852],{"class":182},[176,4677,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700],{"class":178,"line":314},[176,4679,765],{"class":182},[176,4681,817],{"class":182},[176,4683,1063],{"class":204},[176,4685,1066],{"class":182},[176,4687,1036],{"class":204},[176,4689,1039],{"class":182},[176,4691,1073],{"class":204},[176,4693,1076],{"class":182},[176,4695,1079],{"class":204},[176,4697,1013],{"class":182},[176,4699,849],{"class":204},[176,4701,852],{"class":182},[176,4703,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726],{"class":178,"line":320},[176,4705,765],{"class":182},[176,4707,817],{"class":182},[176,4709,999],{"class":204},[176,4711,777],{"class":182},[176,4713,1036],{"class":204},[176,4715,1039],{"class":182},[176,4717,1102],{"class":204},[176,4719,1105],{"class":182},[176,4721,1108],{"class":204},[176,4723,1111],{"class":182},[176,4725,849],{"class":204},[176,4727,852],{"class":182},[354,4729,4731],{"id":4730},"soft-deletes","Soft Deletes",[156,4733,4734,4735,4737,4738,4740],{},"If your model uses the ",[173,4736,1124],{}," trait and you would like to expose the same functionality via the API, call the ",[173,4739,1128],{}," method upon resource registration.",[166,4742,4743],{"className":168,"code":1132,"language":170,"meta":171,"style":171},[173,4744,4745,4751,4755,4775,4791,4795,4827,4831,4861,4865],{"__ignoreMap":171},[176,4746,4747,4749],{"class":178,"line":179},[176,4748,183],{"class":182},[176,4750,187],{"class":186},[176,4752,4753],{"class":178,"line":190},[176,4754,194],{"emptyLinePlaceholder":193},[176,4756,4757,4759,4761,4763,4765,4767,4769,4771,4773],{"class":178,"line":197},[176,4758,235],{"class":200},[176,4760,587],{"class":186},[176,4762,208],{"class":182},[176,4764,592],{"class":186},[176,4766,208],{"class":182},[176,4768,597],{"class":186},[176,4770,208],{"class":182},[176,4772,602],{"class":186},[176,4774,224],{"class":182},[176,4776,4777,4779,4781,4783,4785,4787,4789],{"class":178,"line":227},[176,4778,235],{"class":200},[176,4780,256],{"class":186},[176,4782,208],{"class":182},[176,4784,597],{"class":186},[176,4786,208],{"class":182},[176,4788,619],{"class":186},[176,4790,224],{"class":182},[176,4792,4793],{"class":178,"line":232},[176,4794,194],{"emptyLinePlaceholder":193},[176,4796,4797,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825],{"class":178,"line":251},[176,4798,602],{"class":204},[176,4800,338],{"class":182},[176,4802,656],{"class":655},[176,4804,659],{"class":182},[176,4806,662],{"class":182},[176,4808,666],{"class":665},[176,4810,662],{"class":182},[176,4812,671],{"class":182},[176,4814,674],{"class":182},[176,4816,677],{"class":665},[176,4818,662],{"class":182},[176,4820,682],{"class":182},[176,4822,685],{"class":282},[176,4824,688],{"class":182},[176,4826,691],{"class":182},[176,4828,4829],{"class":178,"line":274},[176,4830,696],{"class":182},[176,4832,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857,4859],{"class":178,"line":279},[176,4834,701],{"class":204},[176,4836,338],{"class":182},[176,4838,706],{"class":655},[176,4840,709],{"class":182},[176,4842,662],{"class":182},[176,4844,714],{"class":665},[176,4846,662],{"class":182},[176,4848,719],{"class":182},[176,4850,674],{"class":182},[176,4852,1243],{"class":665},[176,4854,662],{"class":182},[176,4856,1248],{"class":182},[176,4858,1128],{"class":655},[176,4860,1253],{"class":182},[176,4862,4863],{"class":178,"line":295},[176,4864,696],{"class":182},[176,4866,4867],{"class":178,"line":301},[176,4868,737],{"class":182},[156,4870,4871,4872,4874,4875,4877,4878,4881],{},"This will introduce ",[173,4873,1267],{}," and ",[173,4876,1271],{}," endpoints. To learn how to permanently delete a resource via API (force delete), take a look at the related ",[160,4879,114],{"href":4880},"\u002Fguide\u002Fquery-parameters#soft-deletes"," section.",[166,4883,4884],{"className":751,"code":1279,"language":753,"meta":171,"style":171},[173,4885,4886,4890,4918,4922,4926,4956],{"__ignoreMap":171},[176,4887,4888],{"class":178,"line":179},[176,4889,760],{"class":204},[176,4891,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916],{"class":178,"line":190},[176,4893,765],{"class":182},[176,4895,768],{"class":204},[176,4897,771],{"class":182},[176,4899,774],{"class":204},[176,4901,777],{"class":182},[176,4903,780],{"class":204},[176,4905,783],{"class":182},[176,4907,786],{"class":204},[176,4909,789],{"class":182},[176,4911,792],{"class":204},[176,4913,795],{"class":182},[176,4915,798],{"class":204},[176,4917,801],{"class":182},[176,4919,4920],{"class":178,"line":197},[176,4921,760],{"class":204},[176,4923,4924],{"class":178,"line":227},[176,4925,810],{"class":655},[176,4927,4928,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950,4952,4954],{"class":178,"line":232},[176,4929,765],{"class":182},[176,4931,817],{"class":182},[176,4933,861],{"class":204},[176,4935,864],{"class":182},[176,4937,929],{"class":204},[176,4939,932],{"class":665},[176,4941,1338],{"class":204},[176,4943,840],{"class":182},[176,4945,1343],{"class":204},[176,4947,1013],{"class":182},[176,4949,1348],{"class":204},[176,4951,1019],{"class":182},[176,4953,849],{"class":204},[176,4955,852],{"class":182},[176,4957,4958,4960,4962,4964,4966,4968,4970,4972,4974,4976,4978,4980],{"class":178,"line":251},[176,4959,765],{"class":182},[176,4961,817],{"class":182},[176,4963,861],{"class":204},[176,4965,864],{"class":182},[176,4967,1367],{"class":204},[176,4969,940],{"class":182},[176,4971,1372],{"class":204},[176,4973,1105],{"class":182},[176,4975,1377],{"class":204},[176,4977,1111],{"class":182},[176,4979,849],{"class":204},[176,4981,852],{"class":182},[152,4983,4985],{"id":4984},"customizing-keys","Customizing Keys",[156,4987,4988,4989,4991,4992,4994],{},"By default, endpoints use primary key (usually ",[173,4990,1392],{},") to retrieve models from the database. However, in some cases you would want to use a different field to fetch the models while maintaining the primary key as it is. To do that, override the ",[173,4993,1396],{}," method on the controller:",[166,4996,4998],{"className":168,"code":4997,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n\n    \u002F**\n     * The name of the field used to fetch a resource from the database.\n     *\n     * @return string\n     *\u002F\n    protected function keyName(): string\n    {\n        return 'slug';\n    }\n}\n",[173,4999,5000,5006,5010,5030,5034,5050,5070,5074,5084,5088,5092,5096,5100,5120,5124,5128,5133,5137,5145,5149,5161,5165,5177,5181],{"__ignoreMap":171},[176,5001,5002,5004],{"class":178,"line":179},[176,5003,183],{"class":182},[176,5005,187],{"class":186},[176,5007,5008],{"class":178,"line":190},[176,5009,194],{"emptyLinePlaceholder":193},[176,5011,5012,5014,5016,5018,5020,5022,5024,5026,5028],{"class":178,"line":197},[176,5013,201],{"class":200},[176,5015,205],{"class":204},[176,5017,208],{"class":182},[176,5019,211],{"class":204},[176,5021,208],{"class":182},[176,5023,216],{"class":204},[176,5025,208],{"class":182},[176,5027,221],{"class":204},[176,5029,224],{"class":182},[176,5031,5032],{"class":178,"line":227},[176,5033,194],{"emptyLinePlaceholder":193},[176,5035,5036,5038,5040,5042,5044,5046,5048],{"class":178,"line":232},[176,5037,235],{"class":200},[176,5039,205],{"class":186},[176,5041,208],{"class":182},[176,5043,94],{"class":186},[176,5045,208],{"class":182},[176,5047,246],{"class":186},[176,5049,224],{"class":182},[176,5051,5052,5054,5056,5058,5060,5062,5064,5066,5068],{"class":178,"line":251},[176,5053,235],{"class":200},[176,5055,256],{"class":186},[176,5057,208],{"class":182},[176,5059,211],{"class":186},[176,5061,208],{"class":182},[176,5063,216],{"class":186},[176,5065,208],{"class":182},[176,5067,269],{"class":186},[176,5069,224],{"class":182},[176,5071,5072],{"class":178,"line":274},[176,5073,194],{"emptyLinePlaceholder":193},[176,5075,5076,5078,5080,5082],{"class":178,"line":279},[176,5077,283],{"class":282},[176,5079,286],{"class":204},[176,5081,289],{"class":282},[176,5083,292],{"class":204},[176,5085,5086],{"class":178,"line":295},[176,5087,298],{"class":182},[176,5089,5090],{"class":178,"line":301},[176,5091,305],{"class":304},[176,5093,5094],{"class":178,"line":308},[176,5095,4047],{"class":304},[176,5097,5098],{"class":178,"line":314},[176,5099,317],{"class":304},[176,5101,5102,5104,5106,5108,5110,5112,5114,5116,5118],{"class":178,"line":320},[176,5103,323],{"class":282},[176,5105,326],{"class":182},[176,5107,329],{"class":186},[176,5109,332],{"class":182},[176,5111,335],{"class":204},[176,5113,338],{"class":182},[176,5115,283],{"class":200},[176,5117,343],{"class":182},[176,5119,4072],{"class":304},[176,5121,5122],{"class":178,"line":349},[176,5123,194],{"emptyLinePlaceholder":193},[176,5125,5126],{"class":178,"line":502},[176,5127,305],{"class":304},[176,5129,5130],{"class":178,"line":507},[176,5131,5132],{"class":304},"     * The name of the field used to fetch a resource from the database.\n",[176,5134,5135],{"class":178,"line":528},[176,5136,1540],{"class":304},[176,5138,5139,5141,5143],{"class":178,"line":1543},[176,5140,1546],{"class":304},[176,5142,1550],{"class":1549},[176,5144,1553],{"class":1549},[176,5146,5147],{"class":178,"line":1556},[176,5148,317],{"class":304},[176,5150,5151,5153,5155,5157,5159],{"class":178,"line":1561},[176,5152,323],{"class":282},[176,5154,685],{"class":282},[176,5156,1568],{"class":655},[176,5158,1571],{"class":182},[176,5160,1553],{"class":200},[176,5162,5163],{"class":178,"line":1576},[176,5164,1579],{"class":182},[176,5166,5167,5169,5171,5173,5175],{"class":178,"line":1582},[176,5168,1586],{"class":1585},[176,5170,674],{"class":182},[176,5172,1591],{"class":665},[176,5174,662],{"class":182},[176,5176,224],{"class":182},[176,5178,5179],{"class":178,"line":1598},[176,5180,1601],{"class":182},[176,5182,5183],{"class":178,"line":1604},[176,5184,352],{"class":182},[152,5186,5188],{"id":5187},"customizing-queries","Customizing Queries",[156,5190,5191],{},"Orion is quite flexible and allows you to redefine how Eloquent queries are built and run for each endpoint.",[354,5193,5195],{"id":5194},"for-individual-endpoints","For Individual Endpoints",[1617,5197,5199],{"id":5198},"building-queries","Building queries",[156,5201,5202,5203,5205,5206,4994],{},"Let's say you would like the ",[173,5204,362],{}," endpoint to return only published blog posts. To do so, override the ",[173,5207,1628],{},[166,5209,5211],{"className":168,"code":5210,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n\n    \u002F**\n     * Builds Eloquent query for fetching entities in index method.\n     *\n     * @param Request $request\n     * @param array $requestedRelations\n     * @return Builder\n     *\u002F\n    protected function buildIndexFetchQuery(Request $request, array $requestedRelations): Builder\n    {\n        $query = parent::buildIndexFetchQuery($request, $requestedRelations);\n\n        $query->whereNotNull('published_at');\n\n        return $query;\n    }\n}\n",[173,5212,5213,5219,5223,5243,5247,5263,5283,5287,5297,5301,5305,5309,5313,5333,5337,5341,5346,5350,5360,5370,5378,5382,5410,5414,5440,5444,5464,5468,5478,5482],{"__ignoreMap":171},[176,5214,5215,5217],{"class":178,"line":179},[176,5216,183],{"class":182},[176,5218,187],{"class":186},[176,5220,5221],{"class":178,"line":190},[176,5222,194],{"emptyLinePlaceholder":193},[176,5224,5225,5227,5229,5231,5233,5235,5237,5239,5241],{"class":178,"line":197},[176,5226,201],{"class":200},[176,5228,205],{"class":204},[176,5230,208],{"class":182},[176,5232,211],{"class":204},[176,5234,208],{"class":182},[176,5236,216],{"class":204},[176,5238,208],{"class":182},[176,5240,221],{"class":204},[176,5242,224],{"class":182},[176,5244,5245],{"class":178,"line":227},[176,5246,194],{"emptyLinePlaceholder":193},[176,5248,5249,5251,5253,5255,5257,5259,5261],{"class":178,"line":232},[176,5250,235],{"class":200},[176,5252,205],{"class":186},[176,5254,208],{"class":182},[176,5256,94],{"class":186},[176,5258,208],{"class":182},[176,5260,246],{"class":186},[176,5262,224],{"class":182},[176,5264,5265,5267,5269,5271,5273,5275,5277,5279,5281],{"class":178,"line":251},[176,5266,235],{"class":200},[176,5268,256],{"class":186},[176,5270,208],{"class":182},[176,5272,211],{"class":186},[176,5274,208],{"class":182},[176,5276,216],{"class":186},[176,5278,208],{"class":182},[176,5280,269],{"class":186},[176,5282,224],{"class":182},[176,5284,5285],{"class":178,"line":274},[176,5286,194],{"emptyLinePlaceholder":193},[176,5288,5289,5291,5293,5295],{"class":178,"line":279},[176,5290,283],{"class":282},[176,5292,286],{"class":204},[176,5294,289],{"class":282},[176,5296,292],{"class":204},[176,5298,5299],{"class":178,"line":295},[176,5300,298],{"class":182},[176,5302,5303],{"class":178,"line":301},[176,5304,305],{"class":304},[176,5306,5307],{"class":178,"line":308},[176,5308,4047],{"class":304},[176,5310,5311],{"class":178,"line":314},[176,5312,317],{"class":304},[176,5314,5315,5317,5319,5321,5323,5325,5327,5329,5331],{"class":178,"line":320},[176,5316,323],{"class":282},[176,5318,326],{"class":182},[176,5320,329],{"class":186},[176,5322,332],{"class":182},[176,5324,335],{"class":204},[176,5326,338],{"class":182},[176,5328,283],{"class":200},[176,5330,343],{"class":182},[176,5332,4072],{"class":304},[176,5334,5335],{"class":178,"line":349},[176,5336,194],{"emptyLinePlaceholder":193},[176,5338,5339],{"class":178,"line":502},[176,5340,305],{"class":304},[176,5342,5343],{"class":178,"line":507},[176,5344,5345],{"class":304},"     * Builds Eloquent query for fetching entities in index method.\n",[176,5347,5348],{"class":178,"line":528},[176,5349,1540],{"class":304},[176,5351,5352,5354,5356,5358],{"class":178,"line":1543},[176,5353,1546],{"class":304},[176,5355,1777],{"class":1549},[176,5357,1781],{"class":1780},[176,5359,1784],{"class":304},[176,5361,5362,5364,5366,5368],{"class":178,"line":1556},[176,5363,1546],{"class":304},[176,5365,1777],{"class":1549},[176,5367,1793],{"class":1549},[176,5369,1796],{"class":304},[176,5371,5372,5374,5376],{"class":178,"line":1561},[176,5373,1546],{"class":304},[176,5375,1550],{"class":1549},[176,5377,1805],{"class":1780},[176,5379,5380],{"class":178,"line":1576},[176,5381,317],{"class":304},[176,5383,5384,5386,5388,5390,5392,5394,5396,5398,5400,5402,5404,5406,5408],{"class":178,"line":1582},[176,5385,323],{"class":282},[176,5387,685],{"class":282},[176,5389,1818],{"class":655},[176,5391,709],{"class":182},[176,5393,1823],{"class":204},[176,5395,326],{"class":182},[176,5397,1828],{"class":186},[176,5399,719],{"class":182},[176,5401,1793],{"class":200},[176,5403,326],{"class":182},[176,5405,1837],{"class":186},[176,5407,1840],{"class":182},[176,5409,1805],{"class":204},[176,5411,5412],{"class":178,"line":1598},[176,5413,1579],{"class":182},[176,5415,5416,5418,5420,5422,5424,5426,5428,5430,5432,5434,5436,5438],{"class":178,"line":1604},[176,5417,1851],{"class":182},[176,5419,1854],{"class":186},[176,5421,332],{"class":182},[176,5423,1859],{"class":282},[176,5425,338],{"class":182},[176,5427,1628],{"class":655},[176,5429,1866],{"class":182},[176,5431,1828],{"class":186},[176,5433,719],{"class":182},[176,5435,326],{"class":182},[176,5437,1837],{"class":186},[176,5439,728],{"class":182},[176,5441,5442],{"class":178,"line":1879},[176,5443,194],{"emptyLinePlaceholder":193},[176,5445,5446,5448,5450,5452,5454,5456,5458,5460,5462],{"class":178,"line":1884},[176,5447,1851],{"class":182},[176,5449,1889],{"class":186},[176,5451,1892],{"class":182},[176,5453,1895],{"class":655},[176,5455,709],{"class":182},[176,5457,662],{"class":182},[176,5459,1902],{"class":665},[176,5461,662],{"class":182},[176,5463,728],{"class":182},[176,5465,5466],{"class":178,"line":1909},[176,5467,194],{"emptyLinePlaceholder":193},[176,5469,5470,5472,5474,5476],{"class":178,"line":1914},[176,5471,1586],{"class":1585},[176,5473,326],{"class":182},[176,5475,1889],{"class":186},[176,5477,224],{"class":182},[176,5479,5480],{"class":178,"line":1925},[176,5481,1601],{"class":182},[176,5483,5484],{"class":178,"line":1930},[176,5485,352],{"class":182},[1617,5487,5489],{"id":5488},"running-queries","Running queries",[156,5491,5492,5493,5495],{},"A common example is selecting only specific columns when fetching a list of models. To do so, override the ",[173,5494,1941],{}," method:",[166,5497,5499],{"className":168,"code":5498,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n\n    ...\n\n    \u002F**\n     * Runs the given query for fetching entities in index method.\n     *\n     * @param Request $request\n     * @param Builder $query\n     * @param int $paginationLimit\n     * @return LengthAwarePaginator\n     *\u002F\n    protected function runIndexFetchQuery(Request $request, Builder $query, int $paginationLimit): LengthAwarePaginator\n    {\n        return $query->paginate($paginationLimit, ['id', 'title', 'published_at']);\n    }\n}\n",[173,5500,5501,5507,5511,5531,5535,5551,5571,5575,5585,5589,5593,5597,5601,5621,5625,5629,5633,5637,5642,5646,5656,5666,5676,5684,5688,5724,5728,5772,5776],{"__ignoreMap":171},[176,5502,5503,5505],{"class":178,"line":179},[176,5504,183],{"class":182},[176,5506,187],{"class":186},[176,5508,5509],{"class":178,"line":190},[176,5510,194],{"emptyLinePlaceholder":193},[176,5512,5513,5515,5517,5519,5521,5523,5525,5527,5529],{"class":178,"line":197},[176,5514,201],{"class":200},[176,5516,205],{"class":204},[176,5518,208],{"class":182},[176,5520,211],{"class":204},[176,5522,208],{"class":182},[176,5524,216],{"class":204},[176,5526,208],{"class":182},[176,5528,221],{"class":204},[176,5530,224],{"class":182},[176,5532,5533],{"class":178,"line":227},[176,5534,194],{"emptyLinePlaceholder":193},[176,5536,5537,5539,5541,5543,5545,5547,5549],{"class":178,"line":232},[176,5538,235],{"class":200},[176,5540,205],{"class":186},[176,5542,208],{"class":182},[176,5544,94],{"class":186},[176,5546,208],{"class":182},[176,5548,246],{"class":186},[176,5550,224],{"class":182},[176,5552,5553,5555,5557,5559,5561,5563,5565,5567,5569],{"class":178,"line":251},[176,5554,235],{"class":200},[176,5556,256],{"class":186},[176,5558,208],{"class":182},[176,5560,211],{"class":186},[176,5562,208],{"class":182},[176,5564,216],{"class":186},[176,5566,208],{"class":182},[176,5568,269],{"class":186},[176,5570,224],{"class":182},[176,5572,5573],{"class":178,"line":274},[176,5574,194],{"emptyLinePlaceholder":193},[176,5576,5577,5579,5581,5583],{"class":178,"line":279},[176,5578,283],{"class":282},[176,5580,286],{"class":204},[176,5582,289],{"class":282},[176,5584,292],{"class":204},[176,5586,5587],{"class":178,"line":295},[176,5588,298],{"class":182},[176,5590,5591],{"class":178,"line":301},[176,5592,305],{"class":304},[176,5594,5595],{"class":178,"line":308},[176,5596,4047],{"class":304},[176,5598,5599],{"class":178,"line":314},[176,5600,317],{"class":304},[176,5602,5603,5605,5607,5609,5611,5613,5615,5617,5619],{"class":178,"line":320},[176,5604,323],{"class":282},[176,5606,326],{"class":182},[176,5608,329],{"class":186},[176,5610,332],{"class":182},[176,5612,335],{"class":204},[176,5614,338],{"class":182},[176,5616,283],{"class":200},[176,5618,343],{"class":182},[176,5620,4072],{"class":304},[176,5622,5623],{"class":178,"line":349},[176,5624,194],{"emptyLinePlaceholder":193},[176,5626,5627],{"class":178,"line":502},[176,5628,696],{"class":182},[176,5630,5631],{"class":178,"line":507},[176,5632,194],{"emptyLinePlaceholder":193},[176,5634,5635],{"class":178,"line":528},[176,5636,305],{"class":304},[176,5638,5639],{"class":178,"line":1543},[176,5640,5641],{"class":304},"     * Runs the given query for fetching entities in index method.\n",[176,5643,5644],{"class":178,"line":1556},[176,5645,1540],{"class":304},[176,5647,5648,5650,5652,5654],{"class":178,"line":1561},[176,5649,1546],{"class":304},[176,5651,1777],{"class":1549},[176,5653,1781],{"class":1780},[176,5655,1784],{"class":304},[176,5657,5658,5660,5662,5664],{"class":178,"line":1576},[176,5659,1546],{"class":304},[176,5661,1777],{"class":1549},[176,5663,2110],{"class":1780},[176,5665,2113],{"class":304},[176,5667,5668,5670,5672,5674],{"class":178,"line":1582},[176,5669,1546],{"class":304},[176,5671,1777],{"class":1549},[176,5673,2122],{"class":1549},[176,5675,2125],{"class":304},[176,5677,5678,5680,5682],{"class":178,"line":1598},[176,5679,1546],{"class":304},[176,5681,1550],{"class":1549},[176,5683,2134],{"class":1780},[176,5685,5686],{"class":178,"line":1604},[176,5687,317],{"class":304},[176,5689,5690,5692,5694,5696,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718,5720,5722],{"class":178,"line":1879},[176,5691,323],{"class":282},[176,5693,685],{"class":282},[176,5695,2147],{"class":655},[176,5697,709],{"class":182},[176,5699,1823],{"class":204},[176,5701,326],{"class":182},[176,5703,1828],{"class":186},[176,5705,719],{"class":182},[176,5707,2110],{"class":204},[176,5709,326],{"class":182},[176,5711,1889],{"class":186},[176,5713,719],{"class":182},[176,5715,2122],{"class":200},[176,5717,326],{"class":182},[176,5719,2172],{"class":186},[176,5721,1840],{"class":182},[176,5723,2134],{"class":204},[176,5725,5726],{"class":178,"line":1884},[176,5727,1579],{"class":182},[176,5729,5730,5732,5734,5736,5738,5740,5742,5744,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764,5766,5768,5770],{"class":178,"line":1909},[176,5731,1586],{"class":1585},[176,5733,326],{"class":182},[176,5735,1889],{"class":186},[176,5737,1892],{"class":182},[176,5739,2193],{"class":655},[176,5741,1866],{"class":182},[176,5743,2172],{"class":186},[176,5745,719],{"class":182},[176,5747,2202],{"class":182},[176,5749,662],{"class":182},[176,5751,1392],{"class":665},[176,5753,662],{"class":182},[176,5755,719],{"class":182},[176,5757,674],{"class":182},[176,5759,2215],{"class":665},[176,5761,662],{"class":182},[176,5763,719],{"class":182},[176,5765,674],{"class":182},[176,5767,1902],{"class":665},[176,5769,662],{"class":182},[176,5771,2228],{"class":182},[176,5773,5774],{"class":178,"line":1914},[176,5775,1601],{"class":182},[176,5777,5778],{"class":178,"line":1925},[176,5779,352],{"class":182},[1617,5781,5783],{"id":5782},"performing-operations","Performing operations",[156,5785,5786,5787,5789,5790,5792,5793,5795,5796,5799],{},"The main purpose of endpoints like ",[173,5788,362],{}," or ",[173,5791,2247],{}," is to retrieve data from the database, not change it. But endpoints like ",[173,5794,2251],{},", ",[173,5797,5798],{},"update,"," etc. make changes to the database. It is also possible to customize how certain operations, like storing a model, are performed.",[156,5801,5802],{},"In the given example we would force fill the attributes on the post, if the currently authenticated user is an admin (roles implementation here is imaginary):",[166,5804,5806],{"className":168,"code":5805,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n\n    ...\n\n    \u002F**\n     * Fills attributes on the given entity and stores it in database.\n     *\n     * @param Request $request\n     * @param Model $entity\n     * @param array $attributes\n     *\u002F\n    protected function performStore(Request $request, Model $entity, array $attributes): void\n    {\n        if ($this->resolveUser()->hasRole('admin')) {\n            $entity->forceFill($attributes);\n        } else {\n            $entity->fill($attributes);\n        }\n        $entity->save();\n    }\n}\n",[173,5807,5808,5814,5818,5838,5842,5858,5878,5882,5892,5896,5900,5904,5908,5928,5932,5936,5940,5944,5949,5953,5963,5973,5983,5987,6023,6027,6051,6067,6075,6091,6095,6107,6111],{"__ignoreMap":171},[176,5809,5810,5812],{"class":178,"line":179},[176,5811,183],{"class":182},[176,5813,187],{"class":186},[176,5815,5816],{"class":178,"line":190},[176,5817,194],{"emptyLinePlaceholder":193},[176,5819,5820,5822,5824,5826,5828,5830,5832,5834,5836],{"class":178,"line":197},[176,5821,201],{"class":200},[176,5823,205],{"class":204},[176,5825,208],{"class":182},[176,5827,211],{"class":204},[176,5829,208],{"class":182},[176,5831,216],{"class":204},[176,5833,208],{"class":182},[176,5835,221],{"class":204},[176,5837,224],{"class":182},[176,5839,5840],{"class":178,"line":227},[176,5841,194],{"emptyLinePlaceholder":193},[176,5843,5844,5846,5848,5850,5852,5854,5856],{"class":178,"line":232},[176,5845,235],{"class":200},[176,5847,205],{"class":186},[176,5849,208],{"class":182},[176,5851,94],{"class":186},[176,5853,208],{"class":182},[176,5855,246],{"class":186},[176,5857,224],{"class":182},[176,5859,5860,5862,5864,5866,5868,5870,5872,5874,5876],{"class":178,"line":251},[176,5861,235],{"class":200},[176,5863,256],{"class":186},[176,5865,208],{"class":182},[176,5867,211],{"class":186},[176,5869,208],{"class":182},[176,5871,216],{"class":186},[176,5873,208],{"class":182},[176,5875,269],{"class":186},[176,5877,224],{"class":182},[176,5879,5880],{"class":178,"line":274},[176,5881,194],{"emptyLinePlaceholder":193},[176,5883,5884,5886,5888,5890],{"class":178,"line":279},[176,5885,283],{"class":282},[176,5887,286],{"class":204},[176,5889,289],{"class":282},[176,5891,292],{"class":204},[176,5893,5894],{"class":178,"line":295},[176,5895,298],{"class":182},[176,5897,5898],{"class":178,"line":301},[176,5899,305],{"class":304},[176,5901,5902],{"class":178,"line":308},[176,5903,4047],{"class":304},[176,5905,5906],{"class":178,"line":314},[176,5907,317],{"class":304},[176,5909,5910,5912,5914,5916,5918,5920,5922,5924,5926],{"class":178,"line":320},[176,5911,323],{"class":282},[176,5913,326],{"class":182},[176,5915,329],{"class":186},[176,5917,332],{"class":182},[176,5919,335],{"class":204},[176,5921,338],{"class":182},[176,5923,283],{"class":200},[176,5925,343],{"class":182},[176,5927,4072],{"class":304},[176,5929,5930],{"class":178,"line":349},[176,5931,194],{"emptyLinePlaceholder":193},[176,5933,5934],{"class":178,"line":502},[176,5935,696],{"class":182},[176,5937,5938],{"class":178,"line":507},[176,5939,194],{"emptyLinePlaceholder":193},[176,5941,5942],{"class":178,"line":528},[176,5943,305],{"class":304},[176,5945,5946],{"class":178,"line":1543},[176,5947,5948],{"class":304},"     * Fills attributes on the given entity and stores it in database.\n",[176,5950,5951],{"class":178,"line":1556},[176,5952,1540],{"class":304},[176,5954,5955,5957,5959,5961],{"class":178,"line":1561},[176,5956,1546],{"class":304},[176,5958,1777],{"class":1549},[176,5960,1781],{"class":1780},[176,5962,1784],{"class":304},[176,5964,5965,5967,5969,5971],{"class":178,"line":1576},[176,5966,1546],{"class":304},[176,5968,1777],{"class":1549},[176,5970,2427],{"class":1780},[176,5972,2430],{"class":304},[176,5974,5975,5977,5979,5981],{"class":178,"line":1582},[176,5976,1546],{"class":304},[176,5978,1777],{"class":1549},[176,5980,1793],{"class":1549},[176,5982,2441],{"class":304},[176,5984,5985],{"class":178,"line":1598},[176,5986,317],{"class":304},[176,5988,5989,5991,5993,5995,5997,5999,6001,6003,6005,6007,6009,6011,6013,6015,6017,6019,6021],{"class":178,"line":1604},[176,5990,323],{"class":282},[176,5992,685],{"class":282},[176,5994,2454],{"class":655},[176,5996,709],{"class":182},[176,5998,1823],{"class":204},[176,6000,326],{"class":182},[176,6002,1828],{"class":186},[176,6004,719],{"class":182},[176,6006,2427],{"class":204},[176,6008,326],{"class":182},[176,6010,2471],{"class":186},[176,6012,719],{"class":182},[176,6014,1793],{"class":200},[176,6016,326],{"class":182},[176,6018,2480],{"class":186},[176,6020,1840],{"class":182},[176,6022,2485],{"class":200},[176,6024,6025],{"class":178,"line":1879},[176,6026,1579],{"class":182},[176,6028,6029,6031,6033,6035,6037,6039,6041,6043,6045,6047,6049],{"class":178,"line":1884},[176,6030,2494],{"class":1585},[176,6032,2497],{"class":182},[176,6034,2500],{"class":655},[176,6036,2503],{"class":182},[176,6038,2506],{"class":655},[176,6040,709],{"class":182},[176,6042,662],{"class":182},[176,6044,2513],{"class":665},[176,6046,662],{"class":182},[176,6048,2518],{"class":182},[176,6050,691],{"class":182},[176,6052,6053,6055,6057,6059,6061,6063,6065],{"class":178,"line":1909},[176,6054,2525],{"class":182},[176,6056,2471],{"class":186},[176,6058,1892],{"class":182},[176,6060,2532],{"class":655},[176,6062,1866],{"class":182},[176,6064,2480],{"class":186},[176,6066,728],{"class":182},[176,6068,6069,6071,6073],{"class":178,"line":1914},[176,6070,2543],{"class":182},[176,6072,2546],{"class":1585},[176,6074,691],{"class":182},[176,6076,6077,6079,6081,6083,6085,6087,6089],{"class":178,"line":1925},[176,6078,2525],{"class":182},[176,6080,2471],{"class":186},[176,6082,1892],{"class":182},[176,6084,2559],{"class":655},[176,6086,1866],{"class":182},[176,6088,2480],{"class":186},[176,6090,728],{"class":182},[176,6092,6093],{"class":178,"line":1930},[176,6094,2570],{"class":182},[176,6096,6097,6099,6101,6103,6105],{"class":178,"line":2573},[176,6098,1851],{"class":182},[176,6100,2471],{"class":186},[176,6102,1892],{"class":182},[176,6104,2582],{"class":655},[176,6106,1253],{"class":182},[176,6108,6109],{"class":178,"line":2587},[176,6110,1601],{"class":182},[176,6112,6113],{"class":178,"line":2592},[176,6114,352],{"class":182},[532,6116,6117],{"icon":534},[156,6118,6119,6120,6122],{},"You can also customize how attributes are filled on the model by overriding the ",[173,6121,2602],{}," method.",[354,6124,6126],{"id":6125},"for-a-group-of-endpoints","For a Group of Endpoints",[156,6128,6129,6130,6132,6133,6135],{},"Cool, now the index endpoint returns only published posts. But what if you would like to apply the same constraint to ",[173,6131,2247],{}," endpoint as well? Sure enough, we could duplicate it and override the ",[173,6134,2618],{}," method, but there is a better way.",[1617,6137,5199],{"id":6138},"building-queries-1",[156,6140,6141,6142,6144,6145,6147,6148,5795,6150,5795,6152,5795,6154,6156,6157,6159],{},"If you take a look at how ",[173,6143,1628],{}," method is implemented, you will notice that it uses the ",[173,6146,2631],{}," method. In fact, this method is used by ",[173,6149,362],{},[173,6151,2247],{},[173,6153,2254],{},[173,6155,2641],{},", and ",[173,6158,1267],{}," endpoints to build the query for fetching model(s), and you can override it as well!",[156,6161,6162,6163,4874,6165,6167,6168,5795,6170,6156,6172,6174],{},"Here is what it would look like if you would like to apply the same constraint to ",[173,6164,362],{},[173,6166,2247],{}," endpoints (and ",[173,6169,2254],{},[173,6171,2641],{},[173,6173,1267],{},") at once:",[166,6176,6178],{"className":168,"code":6177,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n\n    \u002F**\n     * Builds Eloquent query for fetching entity(-ies).\n     *\n     * @param Request $request\n     * @param array $requestedRelations\n     * @return Builder\n     *\u002F\n    protected function buildFetchQuery(Request $request, array $requestedRelations): Builder\n    {\n        $query = parent::buildFetchQuery($request, $requestedRelations);\n\n        $query->whereNotNull('published_at');\n\n        return $query;\n    }\n\n    ...\n}\n",[173,6179,6180,6186,6190,6210,6214,6230,6250,6254,6264,6268,6272,6276,6280,6300,6304,6308,6313,6317,6327,6337,6345,6349,6377,6381,6407,6411,6431,6435,6445,6449,6453,6457],{"__ignoreMap":171},[176,6181,6182,6184],{"class":178,"line":179},[176,6183,183],{"class":182},[176,6185,187],{"class":186},[176,6187,6188],{"class":178,"line":190},[176,6189,194],{"emptyLinePlaceholder":193},[176,6191,6192,6194,6196,6198,6200,6202,6204,6206,6208],{"class":178,"line":197},[176,6193,201],{"class":200},[176,6195,205],{"class":204},[176,6197,208],{"class":182},[176,6199,211],{"class":204},[176,6201,208],{"class":182},[176,6203,216],{"class":204},[176,6205,208],{"class":182},[176,6207,221],{"class":204},[176,6209,224],{"class":182},[176,6211,6212],{"class":178,"line":227},[176,6213,194],{"emptyLinePlaceholder":193},[176,6215,6216,6218,6220,6222,6224,6226,6228],{"class":178,"line":232},[176,6217,235],{"class":200},[176,6219,205],{"class":186},[176,6221,208],{"class":182},[176,6223,94],{"class":186},[176,6225,208],{"class":182},[176,6227,246],{"class":186},[176,6229,224],{"class":182},[176,6231,6232,6234,6236,6238,6240,6242,6244,6246,6248],{"class":178,"line":251},[176,6233,235],{"class":200},[176,6235,256],{"class":186},[176,6237,208],{"class":182},[176,6239,211],{"class":186},[176,6241,208],{"class":182},[176,6243,216],{"class":186},[176,6245,208],{"class":182},[176,6247,269],{"class":186},[176,6249,224],{"class":182},[176,6251,6252],{"class":178,"line":274},[176,6253,194],{"emptyLinePlaceholder":193},[176,6255,6256,6258,6260,6262],{"class":178,"line":279},[176,6257,283],{"class":282},[176,6259,286],{"class":204},[176,6261,289],{"class":282},[176,6263,292],{"class":204},[176,6265,6266],{"class":178,"line":295},[176,6267,298],{"class":182},[176,6269,6270],{"class":178,"line":301},[176,6271,305],{"class":304},[176,6273,6274],{"class":178,"line":308},[176,6275,4047],{"class":304},[176,6277,6278],{"class":178,"line":314},[176,6279,317],{"class":304},[176,6281,6282,6284,6286,6288,6290,6292,6294,6296,6298],{"class":178,"line":320},[176,6283,323],{"class":282},[176,6285,326],{"class":182},[176,6287,329],{"class":186},[176,6289,332],{"class":182},[176,6291,335],{"class":204},[176,6293,338],{"class":182},[176,6295,283],{"class":200},[176,6297,343],{"class":182},[176,6299,4072],{"class":304},[176,6301,6302],{"class":178,"line":349},[176,6303,194],{"emptyLinePlaceholder":193},[176,6305,6306],{"class":178,"line":502},[176,6307,305],{"class":304},[176,6309,6310],{"class":178,"line":507},[176,6311,6312],{"class":304},"     * Builds Eloquent query for fetching entity(-ies).\n",[176,6314,6315],{"class":178,"line":528},[176,6316,1540],{"class":304},[176,6318,6319,6321,6323,6325],{"class":178,"line":1543},[176,6320,1546],{"class":304},[176,6322,1777],{"class":1549},[176,6324,1781],{"class":1780},[176,6326,1784],{"class":304},[176,6328,6329,6331,6333,6335],{"class":178,"line":1556},[176,6330,1546],{"class":304},[176,6332,1777],{"class":1549},[176,6334,1793],{"class":1549},[176,6336,1796],{"class":304},[176,6338,6339,6341,6343],{"class":178,"line":1561},[176,6340,1546],{"class":304},[176,6342,1550],{"class":1549},[176,6344,1805],{"class":1780},[176,6346,6347],{"class":178,"line":1576},[176,6348,317],{"class":304},[176,6350,6351,6353,6355,6357,6359,6361,6363,6365,6367,6369,6371,6373,6375],{"class":178,"line":1582},[176,6352,323],{"class":282},[176,6354,685],{"class":282},[176,6356,2842],{"class":655},[176,6358,709],{"class":182},[176,6360,1823],{"class":204},[176,6362,326],{"class":182},[176,6364,1828],{"class":186},[176,6366,719],{"class":182},[176,6368,1793],{"class":200},[176,6370,326],{"class":182},[176,6372,1837],{"class":186},[176,6374,1840],{"class":182},[176,6376,1805],{"class":204},[176,6378,6379],{"class":178,"line":1598},[176,6380,1579],{"class":182},[176,6382,6383,6385,6387,6389,6391,6393,6395,6397,6399,6401,6403,6405],{"class":178,"line":1604},[176,6384,1851],{"class":182},[176,6386,1854],{"class":186},[176,6388,332],{"class":182},[176,6390,1859],{"class":282},[176,6392,338],{"class":182},[176,6394,2631],{"class":655},[176,6396,1866],{"class":182},[176,6398,1828],{"class":186},[176,6400,719],{"class":182},[176,6402,326],{"class":182},[176,6404,1837],{"class":186},[176,6406,728],{"class":182},[176,6408,6409],{"class":178,"line":1879},[176,6410,194],{"emptyLinePlaceholder":193},[176,6412,6413,6415,6417,6419,6421,6423,6425,6427,6429],{"class":178,"line":1884},[176,6414,1851],{"class":182},[176,6416,1889],{"class":186},[176,6418,1892],{"class":182},[176,6420,1895],{"class":655},[176,6422,709],{"class":182},[176,6424,662],{"class":182},[176,6426,1902],{"class":665},[176,6428,662],{"class":182},[176,6430,728],{"class":182},[176,6432,6433],{"class":178,"line":1909},[176,6434,194],{"emptyLinePlaceholder":193},[176,6436,6437,6439,6441,6443],{"class":178,"line":1914},[176,6438,1586],{"class":1585},[176,6440,326],{"class":182},[176,6442,1889],{"class":186},[176,6444,224],{"class":182},[176,6446,6447],{"class":178,"line":1925},[176,6448,1601],{"class":182},[176,6450,6451],{"class":178,"line":1930},[176,6452,194],{"emptyLinePlaceholder":193},[176,6454,6455],{"class":178,"line":2573},[176,6456,696],{"class":182},[176,6458,6459],{"class":178,"line":2587},[176,6460,352],{"class":182},[1617,6462,5489],{"id":6463},"running-queries-1",[156,6465,6466,6467,6469,6470,5795,6472,5795,6474,6156,6476,6478,6479,6481],{},"While ",[173,6468,362],{}," endpoint is sort of an exception when it comes to running queries (since we fetch a list of models, not a single model), ",[173,6471,2247],{},[173,6473,2254],{},[173,6475,2641],{},[173,6477,1267],{}," endpoints share the same logic and use ",[173,6480,2967],{}," under the hood.",[156,6483,6484,6485,5795,6487,6156,6489,6491],{},"With a bit of refactor we get the controller where only published blog posts are fetched and only ",[173,6486,1392],{},[173,6488,2215],{},[173,6490,1902],{}," columns (attributes) are retrieved from the database.",[166,6493,6495],{"className":168,"code":6494,"language":170,"meta":171,"style":171},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Http\\Controllers\\Controller;\n\nclass PostsController extends Controller\n{\n    \u002F**\n     * Fully-qualified model class name\n     *\u002F\n    protected $model = Post::class; \u002F\u002F or \"App\\Models\\Post\"\n\n    \u002F**\n     * The list of attributes to select from db\n     *\u002F\n    protected $attributes = ['id', 'title', 'published_at'];\n\n    \u002F**\n     * Builds Eloquent query for fetching entity(-ies).\n     *\n     * @param Request $request\n     * @param array $requestedRelations\n     * @return Builder\n     *\u002F\n    protected function buildFetchQuery(Request $request, array $requestedRelations): Builder\n    {\n        $query = parent::buildFetchQuery($request, $requestedRelations);\n\n        $query->whereNotNull('published_at');\n\n        return $query;\n    }\n\n    \u002F**\n     * Runs the given query for fetching entity.\n     *\n     * @param Request $request\n     * @param Builder $query\n     * @param int|string $key\n     * @return Model\n     *\u002F\n    protected function runFetchQuery(Request $request, Builder $query, $key): Model\n    {\n        return $query->select($this->attributes)->findOrFail($key);\n    }\n\n    \u002F**\n     * Runs the given query for fetching entities in index method.\n     *\n     * @param Request $request\n     * @param Builder $query\n     * @param int $paginationLimit\n     * @return LengthAwarePaginator\n     *\u002F\n    protected function runIndexFetchQuery(Request $request, Builder $query, int $paginationLimit): LengthAwarePaginator\n    {\n        return $query->paginate($paginationLimit, $this->attributes);\n    }\n\n    \u002F**\n     * Fills attributes on the given entity and stores it in database.\n     *\n     * @param Request $request\n     * @param Model $post\n     * @param array $attributes\n     *\u002F\n    protected function performStore(Request $request, Model $post, array $attributes): void\n    {\n        if ($this->resolveUser()->hasRole('admin')) {\n            $post->forceFill($attributes);\n        } else {\n            $post->fill($attributes);\n        }\n        $post->save();\n    }\n}\n",[173,6496,6497,6503,6507,6527,6531,6547,6567,6571,6581,6585,6589,6593,6597,6617,6621,6625,6630,6634,6670,6674,6678,6682,6686,6696,6706,6714,6718,6746,6750,6776,6780,6800,6804,6814,6818,6822,6826,6831,6835,6845,6855,6869,6877,6881,6915,6919,6945,6949,6953,6957,6961,6965,6975,6985,6995,7003,7007,7043,7047,7071,7075,7079,7083,7087,7091,7101,7111,7121,7125,7161,7165,7189,7205,7213,7229,7233,7245,7249],{"__ignoreMap":171},[176,6498,6499,6501],{"class":178,"line":179},[176,6500,183],{"class":182},[176,6502,187],{"class":186},[176,6504,6505],{"class":178,"line":190},[176,6506,194],{"emptyLinePlaceholder":193},[176,6508,6509,6511,6513,6515,6517,6519,6521,6523,6525],{"class":178,"line":197},[176,6510,201],{"class":200},[176,6512,205],{"class":204},[176,6514,208],{"class":182},[176,6516,211],{"class":204},[176,6518,208],{"class":182},[176,6520,216],{"class":204},[176,6522,208],{"class":182},[176,6524,221],{"class":204},[176,6526,224],{"class":182},[176,6528,6529],{"class":178,"line":227},[176,6530,194],{"emptyLinePlaceholder":193},[176,6532,6533,6535,6537,6539,6541,6543,6545],{"class":178,"line":232},[176,6534,235],{"class":200},[176,6536,205],{"class":186},[176,6538,208],{"class":182},[176,6540,94],{"class":186},[176,6542,208],{"class":182},[176,6544,246],{"class":186},[176,6546,224],{"class":182},[176,6548,6549,6551,6553,6555,6557,6559,6561,6563,6565],{"class":178,"line":251},[176,6550,235],{"class":200},[176,6552,256],{"class":186},[176,6554,208],{"class":182},[176,6556,211],{"class":186},[176,6558,208],{"class":182},[176,6560,216],{"class":186},[176,6562,208],{"class":182},[176,6564,269],{"class":186},[176,6566,224],{"class":182},[176,6568,6569],{"class":178,"line":274},[176,6570,194],{"emptyLinePlaceholder":193},[176,6572,6573,6575,6577,6579],{"class":178,"line":279},[176,6574,283],{"class":282},[176,6576,286],{"class":204},[176,6578,289],{"class":282},[176,6580,292],{"class":204},[176,6582,6583],{"class":178,"line":295},[176,6584,298],{"class":182},[176,6586,6587],{"class":178,"line":301},[176,6588,305],{"class":304},[176,6590,6591],{"class":178,"line":308},[176,6592,4047],{"class":304},[176,6594,6595],{"class":178,"line":314},[176,6596,317],{"class":304},[176,6598,6599,6601,6603,6605,6607,6609,6611,6613,6615],{"class":178,"line":320},[176,6600,323],{"class":282},[176,6602,326],{"class":182},[176,6604,329],{"class":186},[176,6606,332],{"class":182},[176,6608,335],{"class":204},[176,6610,338],{"class":182},[176,6612,283],{"class":200},[176,6614,343],{"class":182},[176,6616,4072],{"class":304},[176,6618,6619],{"class":178,"line":349},[176,6620,194],{"emptyLinePlaceholder":193},[176,6622,6623],{"class":178,"line":502},[176,6624,305],{"class":304},[176,6626,6627],{"class":178,"line":507},[176,6628,6629],{"class":304},"     * The list of attributes to select from db\n",[176,6631,6632],{"class":178,"line":528},[176,6633,317],{"class":304},[176,6635,6636,6638,6640,6642,6644,6646,6648,6650,6652,6654,6656,6658,6660,6662,6664,6666,6668],{"class":178,"line":1543},[176,6637,323],{"class":282},[176,6639,326],{"class":182},[176,6641,3129],{"class":186},[176,6643,332],{"class":182},[176,6645,2202],{"class":182},[176,6647,662],{"class":182},[176,6649,1392],{"class":665},[176,6651,662],{"class":182},[176,6653,719],{"class":182},[176,6655,674],{"class":182},[176,6657,2215],{"class":665},[176,6659,662],{"class":182},[176,6661,719],{"class":182},[176,6663,674],{"class":182},[176,6665,1902],{"class":665},[176,6667,662],{"class":182},[176,6669,3158],{"class":182},[176,6671,6672],{"class":178,"line":1556},[176,6673,194],{"emptyLinePlaceholder":193},[176,6675,6676],{"class":178,"line":1561},[176,6677,305],{"class":304},[176,6679,6680],{"class":178,"line":1576},[176,6681,6312],{"class":304},[176,6683,6684],{"class":178,"line":1582},[176,6685,1540],{"class":304},[176,6687,6688,6690,6692,6694],{"class":178,"line":1598},[176,6689,1546],{"class":304},[176,6691,1777],{"class":1549},[176,6693,1781],{"class":1780},[176,6695,1784],{"class":304},[176,6697,6698,6700,6702,6704],{"class":178,"line":1604},[176,6699,1546],{"class":304},[176,6701,1777],{"class":1549},[176,6703,1793],{"class":1549},[176,6705,1796],{"class":304},[176,6707,6708,6710,6712],{"class":178,"line":1879},[176,6709,1546],{"class":304},[176,6711,1550],{"class":1549},[176,6713,1805],{"class":1780},[176,6715,6716],{"class":178,"line":1884},[176,6717,317],{"class":304},[176,6719,6720,6722,6724,6726,6728,6730,6732,6734,6736,6738,6740,6742,6744],{"class":178,"line":1909},[176,6721,323],{"class":282},[176,6723,685],{"class":282},[176,6725,2842],{"class":655},[176,6727,709],{"class":182},[176,6729,1823],{"class":204},[176,6731,326],{"class":182},[176,6733,1828],{"class":186},[176,6735,719],{"class":182},[176,6737,1793],{"class":200},[176,6739,326],{"class":182},[176,6741,1837],{"class":186},[176,6743,1840],{"class":182},[176,6745,1805],{"class":204},[176,6747,6748],{"class":178,"line":1914},[176,6749,1579],{"class":182},[176,6751,6752,6754,6756,6758,6760,6762,6764,6766,6768,6770,6772,6774],{"class":178,"line":1925},[176,6753,1851],{"class":182},[176,6755,1854],{"class":186},[176,6757,332],{"class":182},[176,6759,1859],{"class":282},[176,6761,338],{"class":182},[176,6763,2631],{"class":655},[176,6765,1866],{"class":182},[176,6767,1828],{"class":186},[176,6769,719],{"class":182},[176,6771,326],{"class":182},[176,6773,1837],{"class":186},[176,6775,728],{"class":182},[176,6777,6778],{"class":178,"line":1930},[176,6779,194],{"emptyLinePlaceholder":193},[176,6781,6782,6784,6786,6788,6790,6792,6794,6796,6798],{"class":178,"line":2573},[176,6783,1851],{"class":182},[176,6785,1889],{"class":186},[176,6787,1892],{"class":182},[176,6789,1895],{"class":655},[176,6791,709],{"class":182},[176,6793,662],{"class":182},[176,6795,1902],{"class":665},[176,6797,662],{"class":182},[176,6799,728],{"class":182},[176,6801,6802],{"class":178,"line":2587},[176,6803,194],{"emptyLinePlaceholder":193},[176,6805,6806,6808,6810,6812],{"class":178,"line":2592},[176,6807,1586],{"class":1585},[176,6809,326],{"class":182},[176,6811,1889],{"class":186},[176,6813,224],{"class":182},[176,6815,6816],{"class":178,"line":3305},[176,6817,1601],{"class":182},[176,6819,6820],{"class":178,"line":3310},[176,6821,194],{"emptyLinePlaceholder":193},[176,6823,6824],{"class":178,"line":3315},[176,6825,305],{"class":304},[176,6827,6828],{"class":178,"line":3320},[176,6829,6830],{"class":304},"     * Runs the given query for fetching entity.\n",[176,6832,6833],{"class":178,"line":3326},[176,6834,1540],{"class":304},[176,6836,6837,6839,6841,6843],{"class":178,"line":3331},[176,6838,1546],{"class":304},[176,6840,1777],{"class":1549},[176,6842,1781],{"class":1780},[176,6844,1784],{"class":304},[176,6846,6847,6849,6851,6853],{"class":178,"line":3342},[176,6848,1546],{"class":304},[176,6850,1777],{"class":1549},[176,6852,2110],{"class":1780},[176,6854,2113],{"class":304},[176,6856,6857,6859,6861,6863,6865,6867],{"class":178,"line":3353},[176,6858,1546],{"class":304},[176,6860,1777],{"class":1549},[176,6862,2122],{"class":1549},[176,6864,765],{"class":1585},[176,6866,3364],{"class":1549},[176,6868,3367],{"class":304},[176,6870,6871,6873,6875],{"class":178,"line":3370},[176,6872,1546],{"class":304},[176,6874,1550],{"class":1549},[176,6876,3377],{"class":1780},[176,6878,6879],{"class":178,"line":3380},[176,6880,317],{"class":304},[176,6882,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913],{"class":178,"line":3385},[176,6884,323],{"class":282},[176,6886,685],{"class":282},[176,6888,3392],{"class":655},[176,6890,709],{"class":182},[176,6892,1823],{"class":204},[176,6894,326],{"class":182},[176,6896,1828],{"class":186},[176,6898,719],{"class":182},[176,6900,2110],{"class":204},[176,6902,326],{"class":182},[176,6904,1889],{"class":186},[176,6906,719],{"class":182},[176,6908,326],{"class":182},[176,6910,3415],{"class":186},[176,6912,1840],{"class":182},[176,6914,3377],{"class":204},[176,6916,6917],{"class":178,"line":3422},[176,6918,1579],{"class":182},[176,6920,6921,6923,6925,6927,6929,6931,6933,6935,6937,6939,6941,6943],{"class":178,"line":3427},[176,6922,1586],{"class":1585},[176,6924,326],{"class":182},[176,6926,1889],{"class":186},[176,6928,1892],{"class":182},[176,6930,3438],{"class":655},[176,6932,3441],{"class":182},[176,6934,2480],{"class":186},[176,6936,1248],{"class":182},[176,6938,3448],{"class":655},[176,6940,1866],{"class":182},[176,6942,3415],{"class":186},[176,6944,728],{"class":182},[176,6946,6947],{"class":178,"line":3457},[176,6948,1601],{"class":182},[176,6950,6951],{"class":178,"line":3462},[176,6952,194],{"emptyLinePlaceholder":193},[176,6954,6955],{"class":178,"line":3467},[176,6956,305],{"class":304},[176,6958,6959],{"class":178,"line":3472},[176,6960,5641],{"class":304},[176,6962,6963],{"class":178,"line":3477},[176,6964,1540],{"class":304},[176,6966,6967,6969,6971,6973],{"class":178,"line":3482},[176,6968,1546],{"class":304},[176,6970,1777],{"class":1549},[176,6972,1781],{"class":1780},[176,6974,1784],{"class":304},[176,6976,6977,6979,6981,6983],{"class":178,"line":3493},[176,6978,1546],{"class":304},[176,6980,1777],{"class":1549},[176,6982,2110],{"class":1780},[176,6984,2113],{"class":304},[176,6986,6987,6989,6991,6993],{"class":178,"line":3504},[176,6988,1546],{"class":304},[176,6990,1777],{"class":1549},[176,6992,2122],{"class":1549},[176,6994,2125],{"class":304},[176,6996,6997,6999,7001],{"class":178,"line":3515},[176,6998,1546],{"class":304},[176,7000,1550],{"class":1549},[176,7002,2134],{"class":1780},[176,7004,7005],{"class":178,"line":3524},[176,7006,317],{"class":304},[176,7008,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031,7033,7035,7037,7039,7041],{"class":178,"line":3529},[176,7010,323],{"class":282},[176,7012,685],{"class":282},[176,7014,2147],{"class":655},[176,7016,709],{"class":182},[176,7018,1823],{"class":204},[176,7020,326],{"class":182},[176,7022,1828],{"class":186},[176,7024,719],{"class":182},[176,7026,2110],{"class":204},[176,7028,326],{"class":182},[176,7030,1889],{"class":186},[176,7032,719],{"class":182},[176,7034,2122],{"class":200},[176,7036,326],{"class":182},[176,7038,2172],{"class":186},[176,7040,1840],{"class":182},[176,7042,2134],{"class":204},[176,7044,7045],{"class":178,"line":3566},[176,7046,1579],{"class":182},[176,7048,7049,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069],{"class":178,"line":3571},[176,7050,1586],{"class":1585},[176,7052,326],{"class":182},[176,7054,1889],{"class":186},[176,7056,1892],{"class":182},[176,7058,2193],{"class":655},[176,7060,1866],{"class":182},[176,7062,2172],{"class":186},[176,7064,719],{"class":182},[176,7066,3590],{"class":182},[176,7068,2480],{"class":186},[176,7070,728],{"class":182},[176,7072,7073],{"class":178,"line":3597},[176,7074,1601],{"class":182},[176,7076,7077],{"class":178,"line":3602},[176,7078,194],{"emptyLinePlaceholder":193},[176,7080,7081],{"class":178,"line":3607},[176,7082,305],{"class":304},[176,7084,7085],{"class":178,"line":3612},[176,7086,5948],{"class":304},[176,7088,7089],{"class":178,"line":3617},[176,7090,1540],{"class":304},[176,7092,7093,7095,7097,7099],{"class":178,"line":3622},[176,7094,1546],{"class":304},[176,7096,1777],{"class":1549},[176,7098,1781],{"class":1780},[176,7100,1784],{"class":304},[176,7102,7103,7105,7107,7109],{"class":178,"line":3633},[176,7104,1546],{"class":304},[176,7106,1777],{"class":1549},[176,7108,2427],{"class":1780},[176,7110,3642],{"class":304},[176,7112,7113,7115,7117,7119],{"class":178,"line":3645},[176,7114,1546],{"class":304},[176,7116,1777],{"class":1549},[176,7118,1793],{"class":1549},[176,7120,2441],{"class":304},[176,7122,7123],{"class":178,"line":3656},[176,7124,317],{"class":304},[176,7126,7127,7129,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153,7155,7157,7159],{"class":178,"line":3661},[176,7128,323],{"class":282},[176,7130,685],{"class":282},[176,7132,2454],{"class":655},[176,7134,709],{"class":182},[176,7136,1823],{"class":204},[176,7138,326],{"class":182},[176,7140,1828],{"class":186},[176,7142,719],{"class":182},[176,7144,2427],{"class":204},[176,7146,326],{"class":182},[176,7148,3684],{"class":186},[176,7150,719],{"class":182},[176,7152,1793],{"class":200},[176,7154,326],{"class":182},[176,7156,2480],{"class":186},[176,7158,1840],{"class":182},[176,7160,2485],{"class":200},[176,7162,7163],{"class":178,"line":3699},[176,7164,1579],{"class":182},[176,7166,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187],{"class":178,"line":3704},[176,7168,2494],{"class":1585},[176,7170,2497],{"class":182},[176,7172,2500],{"class":655},[176,7174,2503],{"class":182},[176,7176,2506],{"class":655},[176,7178,709],{"class":182},[176,7180,662],{"class":182},[176,7182,2513],{"class":665},[176,7184,662],{"class":182},[176,7186,2518],{"class":182},[176,7188,691],{"class":182},[176,7190,7191,7193,7195,7197,7199,7201,7203],{"class":178,"line":3729},[176,7192,2525],{"class":182},[176,7194,3684],{"class":186},[176,7196,1892],{"class":182},[176,7198,2532],{"class":655},[176,7200,1866],{"class":182},[176,7202,2480],{"class":186},[176,7204,728],{"class":182},[176,7206,7207,7209,7211],{"class":178,"line":3746},[176,7208,2543],{"class":182},[176,7210,2546],{"class":1585},[176,7212,691],{"class":182},[176,7214,7215,7217,7219,7221,7223,7225,7227],{"class":178,"line":3755},[176,7216,2525],{"class":182},[176,7218,3684],{"class":186},[176,7220,1892],{"class":182},[176,7222,2559],{"class":655},[176,7224,1866],{"class":182},[176,7226,2480],{"class":186},[176,7228,728],{"class":182},[176,7230,7231],{"class":178,"line":3772},[176,7232,2570],{"class":182},[176,7234,7235,7237,7239,7241,7243],{"class":178,"line":3777},[176,7236,1851],{"class":182},[176,7238,3684],{"class":186},[176,7240,1892],{"class":182},[176,7242,2582],{"class":655},[176,7244,1253],{"class":182},[176,7246,7247],{"class":178,"line":3790},[176,7248,1601],{"class":182},[176,7250,7251],{"class":178,"line":3795},[176,7252,352],{"class":182},[354,7254,7256],{"id":7255},"standard-operations-methods","Standard Operations Methods",[3802,7258,7259,7275],{},[3805,7260,7261],{},[3808,7262,7263,7266,7269,7272],{},[3811,7264,7265],{},"Method",[3811,7267,7268],{},"Build",[3811,7270,7271],{},"Run",[3811,7273,7274],{},"Perform",[3824,7276,7277,7287,7297,7307,7317,7327],{},[3808,7278,7279,7281,7283,7285],{},[3829,7280,362],{},[3829,7282,1628],{},[3829,7284,1941],{},[3829,7286,3837],{},[3808,7288,7289,7291,7293,7295],{},[3829,7290,2251],{},[3829,7292,3844],{},[3829,7294,3847],{},[3829,7296,3850],{},[3808,7298,7299,7301,7303,7305],{},[3829,7300,2247],{},[3829,7302,2618],{},[3829,7304,3859],{},[3829,7306,3837],{},[3808,7308,7309,7311,7313,7315],{},[3829,7310,2254],{},[3829,7312,3868],{},[3829,7314,3871],{},[3829,7316,3874],{},[3808,7318,7319,7321,7323,7325],{},[3829,7320,2641],{},[3829,7322,3881],{},[3829,7324,3884],{},[3829,7326,3887],{},[3808,7328,7329,7331,7333,7335],{},[3829,7330,1267],{},[3829,7332,3894],{},[3829,7334,3897],{},[3829,7336,3900],{},[3902,7338,3904],{},{"title":171,"searchDepth":179,"depth":190,"links":7340},[7341,7344,7347,7348],{"id":3936,"depth":190,"text":3937,"children":7342},[7343],{"id":4079,"depth":197,"text":4080},{"id":4272,"depth":190,"text":4273,"children":7345},[7346],{"id":4730,"depth":197,"text":4731},{"id":4984,"depth":190,"text":4985},{"id":5187,"depth":190,"text":5188,"children":7349},[7350,7351,7352],{"id":5194,"depth":197,"text":5195},{"id":6125,"depth":197,"text":6126},{"id":7255,"depth":197,"text":7256},"Learn how to expose models via API.",{},"\u002Fguide\u002Fmodels",{"title":94,"description":7353},"1.guide\u002F03.models","Ougvzl0gBJYFNUi4oipMDnLe5Lgendw0dSZS6zF_wIo",1784394463197]