在laravel

时间:2018-03-06 12:14:12

标签: laravel laravel-5 laravel-5.5

帮助器,

我有两个表作为用户和地址。我为用户保存了多个地址。现在我想更新一个用户地址。是否有任何单一的更新查询。我将每个输入都作为数组。

*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]
        ]);
    }
}

2 个答案:

答案 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