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 关注
- 104 浏览
添加回答
举报