Laravel同步hasMany与belongsTo数组

时间:2017-11-25 18:59:27

标签: laravel laravel-5 laravel-orm

每个人的亲切时刻!我的问题的本质是: 联系人和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');
    }
}

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

的ContactController

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上的联系人同步。你能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

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

答案 2 :(得分:-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('/');
}