Метод Laravel attach() не работает на стороне hasMany
приложение имеет модели:
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:
вызов неопределенного метода IlluminateDatabaseQueryBuilder:: attach ()
решение (спасибо @gnack):
Я пытался установить отношения "многие ко многим", поэтому просто нужно было изменить это...
return $this->hasMany('Atividade');
для этого:
return $this->belongsToMany('Atividade');
2 ответов
см. документацию Laravel здесь: http://laravel.com/docs/eloquent#inserting-related-models
в основном вы создали два разных типа отношений для тех же двух таблиц - вы создали много-ко-многим и один-ко-многим. Похоже, вы, вероятно, хотели много-ко-многим, поэтому вам нужно изменить эту строку:
return $this->hasMany('Atividade');
для этого:
return $this->belongsToMany('Atividade');
это установит отношение как отношение многие-ко-многим, который затем будет поддерживать attach()
метод.
на attach()
метод только для многих-ко-многим, для других отношений есть save()
или saveMany()
и associate()
(см. документы, связанные выше).
attach()
для отношений "многие ко многим". Кажется, ваши отношения должны быть много-ко-многим, но вы не настроили его правильно для этого.
class Intervencao extends Eloquent {
public function atividades() {
return $this->belongsToMany('Atividade');
}
}
тут attach()
должно работать