laravel 数据库未更新

我有一个带有两个主键的模型,并且我已经覆盖了 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();


大话西游666
浏览 245回答 1
1回答

红颜莎娜

您正在更新用于查找记录的键,因此它现在将在查询中使用这个新键,这不是数据库中的当前键。您需要使用原始键以便它可以找到记录,然后它可以使用新值更新记录。你需要做这样的事情: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;}如果它们存在,则使用这些键的原始值,如果不存在,则使用当前属性值。
打开App,查看更多内容
随时随地看视频慕课网APP