帮助器,
我有两个表作为用户和地址。我为用户保存了多个地址。现在我想更新一个用户地址。是否有任何单一的更新查询。我将每个输入都作为数组。
*users table*
id | name
1 | Mr.X
*addresses table*
id | user_id | city | state |country
1 | 1 | XXX | YYY | ZZZ
2 | 1 | AAA | BBB | CCC
我想改变这样,
*addresses table*
id | user_id | city | state |country
1 | 1 | XXX | SSS | ZZZ
2 | 1 | AAA | BBB | CCC
我尝试了以下代码,但它确实在所有列中都有所改变。
public function update(Request $request, $id){ //$id is users table id
foreach($request->city as $key => $v) {
$user->addresses()->where('user_id', '$id')->update([ //$user->addresses() is one to many relation
'city' => $v,
'state' => $request->state[$key],
'country' => $request->country[$key]
]);
}
}
答案 0 :(得分:0)
您的代码将更新表中用户的每个条目。由于地址表中有一个“id”列(我认为是PK)。我想你可以利用它。您可以使用现有值检索它。 例如:如果要更新第一行
$address = \DB::table("address")->where("city",=,"xxx")->where("country","=","zzz")->where('user_id',=,$id)->first();
\DB::table("address)->find($address->id)->update(["state"=>"new value"]);
或者你可以做
\DB::table("address")->where("city",=,"xxx")->where("country","=","zzz")->where('user_id',=,$id)->update(["state"=>"new value"]);
希望这有帮助。
答案 1 :(得分:0)
试试这种方式;我相信这会解决你的问题..
如果您不想更新所有地址,则需要将from itertools import count
for x in count():
print(x)
作为参数传递。这将仅更新给定$addressId
的地址,其余地址不会受到影响。
$addressId