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