gpt4 book ai didi

Laravel 5 覆盖 Eloquent 保存方法

转载 作者:行者123 更新时间:2023-12-04 15:32:25 25 4
gpt4 key购买 nike

我有复合主键,所以 Laravel 的 save() 方法不起作用。因此我需要覆盖 save 方法。例如,我的主键是由 column_a 和 column_b 组成的复合键。你能举例说明如何覆盖保存方法以及我把它放在哪里吗?

我的主键:column_a、column_b

我尝试了以下方法:

protected function setKeysForSaveQuery(Builder $query)
{
parent::setKeysForSaveQuery($query);
$query->where('locale', '=', $this->locale);
return $query;
}

我找到了上面的代码,但即使我调用一个只从数据库读取值的方法,它也会导致 500 Internal Server Error。我已将 $primaryKey = 'column_a' 和 'locale'(在 where 内)设置为 column_b。我不知道 $this->locale 指的是什么?

这是我发现的另一种方法,但它也失败了
protected $secondaryKey = 'column_b';
function newQuery()
{
$query = parent::newQuery();
$query->where($this->secondaryKey, '=', $this->type);
return $query;
}

同样,我不知道 $this->type 指的是什么。

最佳答案

我找到了解决办法。在模型中,添加primaryKey变量和如下函数

protected $primaryKey = array('column1','column2');

protected function setKeysForSaveQuery(\Illuminate\Database\Eloquent\Builder $query) {
if (is_array($this->primaryKey)) {
foreach ($this->primaryKey as $pk) {
$query->where($pk, '=', $this->original[$pk]);
}
return $query;
}else{
return parent::setKeysForSaveQuery($query);
}
}

来源: https://github.com/laravel/framework/issues/5517#issuecomment-113655441

关于Laravel 5 覆盖 Eloquent 保存方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com