Laravel 5.0 sync () для отношения не работает при сохранении - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть модель Mailgroup и модель CommunicationType.

I Mailgroup может иметь несколько типов 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 ]

3 голосов
/ 17 апреля 2019

Не существует метода sync для отношений один-ко-многим, вам придется использовать save или saveMany.

из документов :

Eloquent предоставляет удобные методы для добавления новых моделей в отношения. Например, возможно, вам нужно вставить новый комментарий для почтовой модели. Вместо ручной настройки атрибута 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.']),
]);
0 голосов
/ 17 апреля 2019

Почтовая группа еще не сохранена.Сначала сохраните / создайте его, а затем синхронизируйте:

$data = $this->request->all();
$mailgroup = Mailgroup::create($data);
$mailgroup->communicationTypes()->sync($data['communication_types']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...