Php Laravel使用1次保存更新多个关系

Php Laravel使用1次保存更新多个关系,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我在互联网上看到过与此相关的事情,但要么我似乎无法完全理解,要么答案非常古老,并且与laravel的旧版本有关,那么有人能给我解释一下如何做到这一点吗 假设我有一个用户的主模型,我的用户模型有多个这样的关系 public function contacts(){ return $this->hasMany('App\Models\Users\UserContacts', 'user_id', 'id'); } public function discounts(){ re

我在互联网上看到过与此相关的事情,但要么我似乎无法完全理解,要么答案非常古老,并且与laravel的旧版本有关,那么有人能给我解释一下如何做到这一点吗

假设我有一个
用户的主模型
,我的用户模型有多个这样的关系

public function contacts(){
    return $this->hasMany('App\Models\Users\UserContacts', 'user_id', 'id');
}

public function discounts(){
    return $this->hasMany('App\Models\Users\UserDiscounts','user_id', 'id');
}
然后在一个更新函数中,我像这样更新用户和关系

//Get the user to update
$user = User::findOrFail($id);
$user->name = $request->name;
$user->age  = $request->age;
$user->discounts->amount = $request->discount_amount;
$user->discounts->start_date = $request->discount_start_date;
$user->contacts->name = $request->contact_name;
$user->contacts->email = $request->contact_email;
我如何保存它以保存用户模型和所有关系

$user->save(); //Only works for user model
$user->update(); //Only works for user model
$user->discounts->save(); //Only works for discount model
我有一个非常大的关系列表,理想情况下,我希望能够用一个命令保存所有关系。这可能吗


谢谢

您可以使用非模型查询来实现这一点,比如
DB::table(“userdiscounters”)->where(“user\u id”、“=”、$user->id)->update([“amount”=>$request->input(“discount\u amount”)、“start\u date”=>$request->input(“discount\u start\u date”))(请注意,不是100%使用这种语法,但可以使用类似的方法)。对于
联系人
,您需要另一条语句,但将保存循环/链接
->save()
函数。只需编写一个方法来执行更新<代码>$user->折扣->amount
不适用于hasMany,折扣是集合而不是实例。使用
sync()
方法如何@我会调查的,谢谢@MartijnICU
->sync()
,以及
->attach()
->detach()
仅适用于
belongstomy()
关系,而不是
hasMany()
/
belongsTo()
关系。