我正在尝试在Laravel中更新两个表。但是我不知道您是否可以在使用Object-> update($ associative-array);
我在laravel中做了一个更新序列,用用户表中的外键更新了一个用户和两个单独表中的位置。我尝试使用表对象更新两个表,并执行更新语句。我通过以下方式尝试了此方法:
$user->update($attributes);
$user->update($attributes); $location->update($attributes);
但这只会更新用户表,并跳过位置表。 $ attributes数组包含表用户和位置的多个列数据。数组是从用户表的第一列到位置表的最后一列的顺序。
但是这些尝试都没有更新两个表。他们仅更新用户并跳过位置。据我所知,如果数组包含表中相同顺序的列数据,而Laravel完成其余操作,则可以对关联数组进行此操作。只需更新用户表,它就可以工作,但是我希望它以对对象使用更新功能的方式来与两个表一起工作。
MySQL表
users:
id
firstname
middlename
lastname
active
email
password
phone
mobile_work
phone_work
gender
position_id
settling_id
location_id
locations:
id
street
house_number
addition
zipcode
city
province
country
public function update(Request $request, User $user, Location $location)
{
$attributes = request()->validate([
'firstname' => 'min:3|max:50',
'middlename' => 'max:50',
'lastname' => 'min:3|max:50',
'active' => 'required',
'email' => 'min:3|max:100',
'gender' => '',
'phone' => 'numeric|min:8',
'mobile_work' => 'numeric|min:8',
'phone_work' => 'numeric|min:8',
'position_id' => '',
'settling_id' => '',
'location_id' => '',
'street' => 'required|min:3',
'house_number' => 'required|numeric',
'addition' => '',
'zipcode' => 'required|min:6|max:7',
'city' => 'required|min:3',
'province' => 'required|min:3',
'country' => '',
]);
$user->update($attributes);
}
如果我无法做到这一点,我想听听在一个更新序列中更新两个表的标准方法。
答案 0 :(得分:0)
您尝试执行的操作不太正确。您还应该尝试更新该关系,最好先喜欢
$location->update($locationAttributes);
$user->update($userAttributes);
顺便说一句,您不清楚要更新位置记录还是要将新的位置与用户相关联。如果是后者,则可以将位置与用户相关联
$user->locations()->attach($locationId);
答案 1 :(得分:0)
我犯了一个错误,就是没有将模型User的locations功能包括在更新序列中。
用户模型:
public function locations()
{
return $this->hasOne(Location::class, 'id', 'location_id');
}
我通过简单地将$ attribute数组分配给具有它们自己的表列数据的2个数组来解决了这个问题。我还做了第二条语句,该语句从模型中调用了定位功能,并相应地对其进行了更新。
$user->locations()->update($locationAttributes);
$user->update($attributes);
其中$ attributes仅包含用户信息,而$ locationAttributes仅包含位置信息。
$ locations()引用表位置中的行。它通过从所选用户获取location_id来知道要选择哪一行。