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 在多态关系中

Laravel 多对多关系( hasMany 或 belongsToMany )

在laravel 5.1单元测试中嘲笑hasMany关系

Laravel ORM 友谊关系不重复

Laravel 关系查询加载 hasMany + BelongsToMany