Laravel 5.0 sync()关于关系在存储时不起作用

时间:2019-04-17 08:50:51

标签: php laravel laravel-5 eloquent

我有一个模型Mailgroup和一个CommunicationType模型。

我的邮件组可以具有多个CommuniationType。这是我的关系:

邮件组模型:

public function communicationTypes()
{
    return $this->hasMany('App\CommunicationType');
}

CommunicationType模型:

public function mailgroup()
{
    return $this->belongsTo('App\ImageRequest');
}

这是我尝试存储新邮件组的代码。

$data = $this->request->all();
$mailgroup = new Mailgroup($data);
$mailgroup->communicationTypes()->sync($data['communication_types']);

$ data的结果

array:5 [▼
  "_token" => "j8lcEMggCakzANNbeVLYZttdOLUwJYKIJi0m85e6"
  "name" => "a"
  "administrator" => "abc"
  "communication_types" => array:2 [▼
    0 => "a"
    1 => "a"
  ]
  "site_id" => 4
]

错误:

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: sync()

我在这里做错什么了吗?

2 个答案:

答案 0 :(得分:3)

没有用于一对多关系的sync方法,您将不得不使用savesaveMany

来自docs

  

Eloquent提供了方便的方法来向其中添加新模型   关系。例如,也许您需要插入一个新的注释   用于Post模型。代替手动设置post_id属性   在评论上,您可以直接从   关系的保存方法:

$comment = new App\Comment(['message' => 'A new comment.']);

$post = App\Post::find(1);

$post->comments()->save($comment);
  

如果需要保存多个相关模型,则可以使用saveMany   方法:

$post = App\Post::find(1);

$post->comments()->saveMany([
    new App\Comment(['message' => 'A new comment.']),
    new App\Comment(['message' => 'Another comment.']),
]);

答案 1 :(得分:0)

邮件组尚未保存。首先保存/创建,然后同步:

$data = $this->request->all();
$mailgroup = Mailgroup::create($data);
$mailgroup->communicationTypes()->sync($data['communication_types']);