1 回答

TA貢獻1827條經驗 獲得超4個贊
根據拉拉維爾的說法,雄辯不支持復合主鍵。你可以在這里查看這個問題
如果您真的想這樣做,那么您可以覆蓋并設置您的密鑰。setKeysForSaveQueryModel.php
默認情況下:
protected function setKeysForSaveQuery(Builder $query)
{
$query->where($this->getKeyName(), '=', $this->getKeyForSaveQuery());
return $query;
}
$this->getKeyName()將返回主鍵名稱,并將返回鍵的值。$this->getKeyForSaveQuery()
這意味著雄辯總是只用1個字段進行過濾。
一旦你執行了一個動作(),它就會被調用,它的作用是在SQL中生成一個子句。saveUPDATE and DELETEWHERE
例如,將其放入使用復合主鍵的模型中:
protected function setKeysForSaveQuery(Builder $query)
{
$keys = $this->getKeyName();
if(!is_array($keys)){
return parent::setKeysForSaveQuery($query);
}
foreach($keys as $keyName){
$query->where($keyName, '=', $this->getKeyForSaveQuery($keyName));
}
return $query;
}
protected function getKeyForSaveQuery($keyName = null)
{
if(is_null($keyName)){
$keyName = $this->getKeyName();
}
if (isset($this->original[$keyName])) {
return $this->original[$keyName];
}
return $this->getAttribute($keyName);
}
如果在 setKeysForSaveQuery() 定義中使用生成器參數類型,則還需要將以下內容添加到模型的頂部:
use Illuminate\Database\Eloquent\Builder;
- 1 回答
- 0 關注
- 93 瀏覽
添加回答
舉報