为了账号安全,请及时绑定邮箱和手机立即绑定

laravel 数据库未更新

laravel 数据库未更新

PHP
大话西游666 2022-06-11 09:49:19
我有一个带有两个主键的模型,并且我已经覆盖了 setKeysForSaveQuery()。$object->save() 返回 true,我尝试 dd 更新的数据,它显示已经更新,但是刷新数据库后,它没有被更新。class Test extends Model{    protected $primaryKey = ['number','type'];    public $incrementing = false;    protected $fillable = [       'number','type'    ];    protected function setKeysForSaveQuery(Builder $query)    {        $query            ->where('number', '=', $this->getAttribute('number'))            ->where('type', '=', $this->getAttribute('type'));        return $query;    }}这就是我在控制器中更新模型的方式$object=Test::where('number',$number)->where('type','string')->first();$object->number=$target_number;$object->save();
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您正在更新用于查找记录的键,因此它现在将在查询中使用这个新键,这不是数据库中的当前键。您需要使用原始键以便它可以找到记录,然后它可以使用新值更新记录。


你需要做这样的事情:


protected function setKeysForSaveQuery(Builder $query)

{

    $number = $this->original['number'] ?? $this->getAttribute('number');

    $type = $this->original['type'] ?? $this->getAttribute('type');


    $query->where('number', '=', $number)

        ->where('type', '=', $type);


    return $query;

}

如果它们存在,则使用这些键的原始值,如果不存在,则使用当前属性值。


查看完整回答
反对 回复 2022-06-11
  • 1 回答
  • 0 关注
  • 244 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信