我最初想使用Eloquent:
$product->quantity_discounts()
->where('min_amount', $discount['min_amount'])
->where('user_id', $discount['user_id'])
->where('group_id', $discount['group_id'])
->update($discount);
但是Eloquent不支持复合主键(https://github.com/laravel/framework/issues/5355)。
我的代码,使用查询生成器:
DB::table('quantity_discounts')
->where('min_amount', $discount['min_amount'])
->where('user_id', $discount['user_id'])
->where('group_id', $discount['group_id'])
->where('product_id', $id)
->update($discount);
$折扣:
[
"min_amount" => "2",
"price" => "20",
"user_id" => "1",
"group_id" => "0"
]
唯一更改的字段是价格。所有其他字段都是主键约束的一部分。
但是,准确传递 美元折扣中的内容是可行的。似乎查询生成器不会大量分配值给主键。
查询update($discount)
:
update `quantity_discounts` set `min_amount` = ?, `price` = ?, `user_id` = ?, `group_id` = ? where `min_amount` = ? and `user_id` = ? and `group_id` = ? and `product_id` = ?
查询update([...])
:
update `quantity_discounts` set `min_amount` = ?, `price` = ?, `user_id` = ?, `group_id` = ? where `min_amount` = ? and `user_id` = ? and `group_id` = ? and `product_id` = ?
查询是相同的。数组是相同的。 []有效,但$ discount无效。
如果更改任何主键字段,则价格也不会更改。什么都不会改变。如果仅更改价格,价格将会更改。
尽管使用原始数组[]也可以:
并且数组确实是相同的:
这可能是某种大规模分配保护吗? ["min_amount" => $discount["min_amount"], ...]
也不起作用。我将所有字段都设置为$ fillable,但这是针对Eloquent的,不是针对查询生成器的。
答案 0 :(得分:2)
在变量mynewlist
的情况下,我看到一个逻辑错误,这可能是原因,您正在寻找新的ID,而不是旧的ID,如果产品仅提供一个折扣,那么更新就没有之所以起作用,是因为不存在具有新ID的折扣,但是如果您仅更改价格或金额,则更新有效,因为ID并未更改,因此您需要按旧ID搜索并使用变量#[[1]]
#[1] 2 3 4 5
2 5 48 4
2 3 4 35
23 3 4 85
2 3 48 5
更新。
$discount
希望对您有所帮助!