我正在尝试更新 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_idlocations: id street house_number addition zipcode city province countrypublic 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);}如果我尝试的方式是不可能的,我想听听在一个更新序列中更新两个表的标准方法是什么。
2 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
你试图做的事情并不完全正确。你也应该尝试更新关系,最好先像
$location->update($locationAttributes);
$user->update($userAttributes);
顺便说一下,您想更新位置记录还是想将新位置关联到用户还不是很清楚。如果是后者,那么您可以将位置与用户相关联
$user->locations()->attach($locationId);
繁华开满天机
TA贡献1816条经验 获得超4个赞
我犯了一个错误,没有将模型用户的位置函数包含到更新序列中。
用户模型:
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 来知道要选择哪一行。
- 2 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消