Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更新专栏内容含糊不清,同时更新内容雄辩_Php_Mysql_Eloquent_Laravel 5.2_Ambiguous - Fatal编程技术网

Php 更新专栏内容含糊不清,同时更新内容雄辩

Php 更新专栏内容含糊不清,同时更新内容雄辩,php,mysql,eloquent,laravel-5.2,ambiguous,Php,Mysql,Eloquent,Laravel 5.2,Ambiguous,我有3个桌上推车、药房和推车药房 购物车表 cart_id | user_id | total_price | status | created_at | updated_at pharmacy_id | name | address_id | created_at | updated_at cart_pharmacies_id | cart_id | pharmacy_id | created_at | updated_at 药房表 cart_id | user_id | total_p

我有3个桌上推车、药房和推车药房

购物车表

cart_id | user_id | total_price | status | created_at | updated_at
pharmacy_id | name | address_id | created_at | updated_at
cart_pharmacies_id | cart_id | pharmacy_id | created_at | updated_at
药房表

cart_id | user_id | total_price | status | created_at | updated_at
pharmacy_id | name | address_id | created_at | updated_at
cart_pharmacies_id | cart_id | pharmacy_id | created_at | updated_at
购物车药房表

cart_id | user_id | total_price | status | created_at | updated_at
pharmacy_id | name | address_id | created_at | updated_at
cart_pharmacies_id | cart_id | pharmacy_id | created_at | updated_at
在cart模式中,我定义了关系

   public function pharmacy()
    {
        return $this->belongsToMany('App\Pharmacy','cart_pharmacies','cart_id','pharmacy_id');
    }
在parmacy模式中,我定义了

public function cart()
{
    return $this->belongsToMany('App\Cart','cart_pharmacies','pharmacy_id','cart_id');
}
在控制器中,我有药房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”(主表和相关表)的列,无法决定更新哪个列。这是一个错误,我认为没有办法用eloquent解决,因为在没有指定表名的情况下,将在末尾自动添加更新的内容。

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

public$timestamps=false


试试看,在透视表中使用时间戳可能会有所帮助,

可以通过Elount with withTimestamps()方法自动控制时间戳

在您的parmacy模式中:

公共功能车() {


}

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

假设您有一个要更新的值数组(
$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);
Model
是导入的
illumb\Database\Eloquent\Model
table
是您真正想要更新的表的名称


虽然不是最好的,但它很有效,也许这将成为未来的一项功能…

这里是解决这个问题的链接

https://github.com/laravel/framework/issues/13909
更新前使用
toBase()
对我解决问题有很大帮助 快乐编码

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

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

您如何传递updated_at value?您可以在我的代码中看到,我没有传递updated_at value这就是您缺少更新的_at value周围的单引号的问题。似乎有一些通用代码正在传递值。看一看,实际上,在laravel中,引号是默认处理的。我们与此无关。即使我认为它是引号的问题,那么错误将不同于此。这将是一个语法错误,与含糊不清的语言无关。我更关心的是如何处理elequoent中的别名,而不是处理引号,因为这可以由laravel完成,因为这是框架问题。我知道这是一个老问题,但可能是重复的,对于这个问题有一个有用的答案:我已经这样做了,它可以工作,但它不存储更新的\u at valueset您的时间戳默认值by CURRENT\u TIMESTAMP在您的数据库中我倾向于同意谢谢您的回答。希望它能帮助别人。