В приложении есть модели:
class Atividade extends Eloquent { public function intervencoes() { return $this->belongsToMany('Intervencao'); } }
class Intervencao extends Eloquent { public function atividades() { return $this->hasMany('Atividade'); } }
Следующий код работает:
Atividade::find($id)->intervencoes()->attach($intervencao_id);
Но это…
Intervencao::find($id)->atividades()->attach($atividade_id);
Возвращает исключение BadMethodCallException:
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: attach ()
Я пытался установить отношения «многие ко многим», поэтому просто нужно было изменить это …
return $this->hasMany('Atividade');
К этому:
return $this->belongsToMany('Atividade');
См. Документацию Laravel здесь: http://laravel.com/docs/eloquent#inserting-related-models
В основном вы создали два разных типа отношений для одних и тех же двух таблиц – вы создали много-ко-многим и один-ко-многим. Похоже, вы, вероятно, хотели много-ко-многим, поэтому вам нужно будет изменить эту строку:
return $this->hasMany('Atividade');
К этому:
return $this->belongsToMany('Atividade');
Это установит связь как отношение «многие ко многим», которое затем поддержит метод attach()
.
Метод attach()
предназначен только для многих-ко-многим, для других отношений есть save()
и associate()
(см. Документы, связанные выше).
attach()
для отношений «многие ко многим». Кажется, ваши отношения должны быть много-ко многим, но вы не настроили их правильно.
class Intervencao extends Eloquent { public function atividades() { return $this->belongsToMany('Atividade'); } }
Тогда attach()
должен работать