【问题标题】:laravel database not being updatedlaravel 数据库未更新
【发布时间】:2020-03-30 03:13:23
【问题描述】:

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

【问题讨论】:

    标签: php database laravel laravel-5 insert-update


    【解决方案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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 2012-08-29
      • 2019-03-10
      相关资源
      最近更新 更多