Laravel同步hasMany与belongsTo数组

问题描述 投票:1回答:3

大家好心的时刻!我的问题的本质是:有两个模型Contact和PhoneNum!模型中的关系:

use Illuminate\Database\Eloquent\Model;

class Contact extends Model
{
    protected $table = 'contacts';
    public function phoneNums()
    {
        return $this->hasMany('App\Models\PhoneNum');
    }
}

PhoneNum模型

class PhoneNum extends Model
{
    protected $table = 'phoneNums';
    protected $fillable = ['phone_num'];

    public function contact()
    {
        return $this->belongsTo('App\Models\Contact');
    }
}

以编辑联系人的形式,我得到它的名字和一个包含该联系人电话号码的数组。

接触控制器

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上的联系人同步。你能帮帮我吗?

laravel laravel-5 laravel-orm
3个回答
0
投票

首先:将$request->name改为$request->input('name')。通过此更改,您将在大约5个月内知道此变量来自表单。

第二,解决您的问题。这是一个例子。您需要将其更改为正确的名称,并将变量添加到模型中的质量分配字段。

foreach($request->input('phoneNums') as $phoneNumber){
    $contact->phoneNums()->create([
        'number' => $phoneNumber
    ]);
}

并查看PSR规则,这样您就可以使代码更加友好:http://www.php-fig.org/psr/


0
投票

您必须先删除旧的联系人,然后插入新创建的联系人。

$contact->phoneNums()->delete();
$contact->phoneNums()->saveMany([$request->input('phoneNums')]);

-1
投票

添加同步方法以更新功能,如下所示

Public function update(Request $request, $id)

{
    $contact = Contact::find($id);
    $contact->name = $request->name;
    $contact->save();
    $contact->phoneNums()->sync($request->phoneNums, true)

    return redirect('/');
} 
© www.soinside.com 2019 - 2024. All rights reserved.