为了账号安全,请及时绑定邮箱和手机立即绑定

在 Laravel 中有更新两个连接表的通用方法吗?

在 Laravel 中有更新两个连接表的通用方法吗?

PHP
缥缈止盈 2021-09-18 16:18:35
我正在尝试更新 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);


查看完整回答
反对 回复 2021-09-18
?
繁华开满天机

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 来知道要选择哪一行。


查看完整回答
反对 回复 2021-09-18
  • 2 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信