Laravel同步hasMany与belongsTo数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel同步hasMany与belongsTo数组相关的知识,希望对你有一定的参考价值。
大家好心的时刻!我的问题的本质是:有两个模型Contact和PhoneNum!模型中的关系:
use IlluminateDatabaseEloquentModel;
class Contact extends Model
{
protected $table = 'contacts';
public function phoneNums()
{
return $this->hasMany('AppModelsPhoneNum');
}
}
PhoneNum模型
class PhoneNum extends Model
{
protected $table = 'phoneNums';
protected $fillable = ['phone_num'];
public function contact()
{
return $this->belongsTo('AppModelsContact');
}
}
以编辑联系人的形式,我得到它的名字和一个包含该联系人电话号码的数组。
接触控制器
public function update(Request $request, $id)
{
$contact = Contact::find($id);
$contact->name = $request->name;
$contact->save();
//what should I do with the array $request->phoneNums ????
return redirect('/');
}
我无法将这些新电话号码与ID上的联系人同步。你能帮帮我吗?
答案
首先:将$request->name
改为$request->input('name')
。通过此更改,您将在大约5个月内知道此变量来自表单。
第二,解决您的问题。这是一个例子。您需要将其更改为正确的名称,并将变量添加到模型中的质量分配字段。
foreach($request->input('phoneNums') as $phoneNumber){
$contact->phoneNums()->create([
'number' => $phoneNumber
]);
}
并查看PSR规则,这样您就可以使代码更加友好:http://www.php-fig.org/psr/。
另一答案
您必须先删除旧的联系人,然后插入新创建的联系人。
$contact->phoneNums()->delete();
$contact->phoneNums()->saveMany([$request->input('phoneNums')]);
另一答案
添加同步方法以更新功能,如下所示
Public function update(Request $request, $id)
{
$contact = Contact::find($id);
$contact->name = $request->name;
$contact->save();
$contact->phoneNums()->sync($request->phoneNums, true)
return redirect('/');
}
以上是关于Laravel同步hasMany与belongsTo数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 8 中获取与 json 有一个 hasMany 关系的表的所有模型?
Laravel hasMany 与 where 在多态关系中