Метод Laravel attach () не работает с hasMany side

В приложении есть модели:

Atividade.php

class Atividade extends Eloquent { public function intervencoes() { return $this->belongsToMany('Intervencao'); } } 

Intervencao.php

 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 ()

РЕШЕНИЕ (благодаря @gnack):

Я пытался установить отношения «многие ко многим», поэтому просто нужно было изменить это …

 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() должен работать