第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為具有組合主鍵的表創(chuàng)建 CRUD API

如何為具有組合主鍵的表創(chuàng)建 CRUD API

PHP
繁華開滿天機 2022-06-17 17:07:59
我有一個提供 CRUD API 的 Laravel 應用程序。有一個包含主鍵的表,我在模型和遷移文件中介紹了鍵:protected $primaryKey = ['personel_id', 'valid_for_quarter'];我也這樣定義了它的路線:Route::middleware('auth:api')->group( function () { Route::apiResources([    'peopleDatas' => 'API\PeopleDataController' ]);});以及包含show如下方法的控制器類:public function show(PeopleData $peopleData){    dd($peopleData);}  現(xiàn)在的問題是:1、當對象有多個主鍵的情況下,訪問show方法的url是什么?請注意,我沒有自己明確定義路由 url,我想使用Route::apiResources方法??赡軉幔窟@是路線列表:|        | GET|HEAD  | api/peopleDatas                         | peopleDatas.index                 | App\Http\Controllers\API\PeopleDataController@index                       | api,auth:api ||        | POST      | api/peopleDatas                         | peopleDatas.store                 | App\Http\Controllers\API\PeopleDataController@store                       | api,auth:api ||        | GET|HEAD  | api/peopleDatas/{peopleData}            | peopleDatas.show                  | App\Http\Controllers\API\PeopleDataController@show                        | api,auth:api ||        | DELETE    | api/peopleDatas/{peopleData}            | peopleDatas.destroy               | App\Http\Controllers\API\PeopleDataController@destroy                     | api,auth:api ||        | PUT|PATCH | api/peopleDatas/{peopleData}            | peopleDatas.update                | App\Http\Controllers\API\PeopleDataController@update                      | api,auth:api |另一方面,在這種情況下我應該明確定義網址嗎?例如/api/peopleDatas/{key1}/{key2},或者有任何適用于 Laravel 的標準方法嗎?2.如果對象有多個主鍵Eloquent,Laravel 路由模型綁定是否可以處理它并從數(shù)據(jù)庫中獲取項目,或者我需要從用戶那里獲取 id 并將find函數(shù)應用于我的模型?3.如果 Laravel 默認不處理它,是否可以重寫一些函數(shù)來告訴 Laravel 如何從數(shù)據(jù)庫中獲取項目以防萬一Route Model Binding?
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

是否有理由不能將單個唯一值(例如自動增量 ID)作為主鍵,然后將兩個附加索引作為唯一復合索引?


這將解決您的路由參數(shù)問題,因為您只有一個主鍵:


/api/peopleDatas/{id}


您的遷移將包括唯一復合索引的規(guī)范:


$table->unique(['personel_id', 'valid_for_quarter']);

這樣,您的組合列保持唯一性,而您的路線被簡化為單個 ID,并且您的關系也可以使用單個 ID。這將提高性能并簡化代碼。


或者,如果您絕對必須有一個復合主鍵,您可以這樣做。您的遷移需要:


$table->primary(['personel_id', 'valid_for_quarter']);

您的模型需要為保存查詢設置鍵(請參閱鏈接) https://blog.maqe.com/solved-eloquent-doesnt-support-composite-primary-keys-62b740120f


protected function setKeysForSaveQuery(Builder $query)

{

    $query

        ->where('personel_id', '=', $this->getAttribute('personel_id'))

        ->where('valid_for_quarter', '=', $this->getAttribute('valid_for_quarter'));


    return $query;

}

路由綁定的最佳解決方案是使用顯式路由模型綁定(請參閱文檔鏈接),您的參數(shù)是兩個鍵的分隔組合:


/api/peopleDatas/{people_data}人員數(shù)據(jù) =1_3例如


https://laravel.com/docs/5.8/routing#explicit-binding


在您的路線服務提供商中,您需要指定解析邏輯,如下所示:


public function boot()

{

    parent::boot();


    Route::bind('people_data', function ($value) {

        return App\PeopleData::where('personal_id', explode('_', $value)[0])

            ->where('valid_for_quarter',  explode('_', $value)[1])

            ->first() ?? abort(404);

    });

}


查看完整回答
反對 回復 2022-06-17
  • 1 回答
  • 0 關注
  • 175 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號