updated_at列模棱两可,同时用雄辩更新



我有3桌推车,药房和cart_pharmacies

购物车表

cart_id | user_id | total_price | status | created_at | updated_at

药房表

pharmacy_id | name | address_id | created_at | updated_at

cart_pharmacies表

cart_pharmacies_id | cart_id | pharmacy_id | created_at | updated_at

在购物车模态中,我定义关系

   public function pharmacy()
    {
        return $this->belongsToMany('AppPharmacy','cart_pharmacies','cart_id','pharmacy_id');
    }

在parmacy modal i define

public function cart()
{
    return $this->belongsToMany('AppCart','cart_pharmacies','pharmacy_id','cart_id');
}

在控制器中,我pharmacy_id尝试使用代码更新购物车状态

$pharmacy_id=$request->input('pharmacy_id');
$pharmacy=  Pharmacy::findOrFail($pharmacy_id);
$pharmacy->cart()->update(['status'=>1]);

但它给了我错误

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 
'updated_at' in field list is ambiguous (SQL: update `cart` inner join 
`cart_pharmacies` on `cart`.`cart_id` = `cart_pharmacies`.`cart_id` set 
`status` = 1, 
`updated_at` = 2016-05-31 07:14:47 where `cart_pharmacies`.`pharmacy_id` = 5)

SQL 查询错误说有多个名为"updated_at"的列(主表和相关表),并且无法决定要更新哪个列。这是一个错误,我认为没有办法用雄辩来解决,因为updated_at将在没有指定表名的情况下自动添加到末尾。

$pharmacy->cart()->toBase()->update(['status'=>1, 'cart.updated_at' => now()]);

使用 toBase() 方法并添加 'cart.updated_at' => now() 来更新数据

您在数据透视表中使用时间戳,该时间戳可以通过 Eloquent 使用 withTimestamps() 方法自动控制。

在你的帕玛西模式中:

公共功能车(){

return $this->belongsToMany('AppCart','cart_pharmacies','pharmacy_id','cart_id')->withTimestamps();

}

到目前为止,我找到的唯一解决方案如下:

假设您有一个要更新的值数组 ( $values ) 和查询 ( $query ),您只需创建一个基本查询并手动添加列:

$now = now();
// Manually add the timestamp columns
$values = $values + [
    'table.' . Model::CREATED_AT => $now,
    'table.' . Model::UPDATED_AT => $now,
];
$query->toBase()->update($values);

ModelIlluminateDatabaseEloquentModel 的导入,table是您真正要更新的表的名称。

不是最好的,但它有效,也许这将成为未来的功能......

这是克服该问题的链接

https://github.com/laravel/framework/issues/13909

在更新之前使用toBase()对我解决问题有很大帮助快乐编码。

如果您使用模态,请使用此行更新您的模态

public $timestamps = false;

尝试,可能会有所帮助

相关内容

  • 没有找到相关文章

最新更新