Laravel : вызов неопределенного метода IlluminateDatabaseQuery Builder::detach()

#laravel #eloquent

#laravel #красноречивый

Вопрос:

Я пытаюсь удалить объектную модель, Studio которая hasMany моделирует Member и hasMany model Game и задать поведение для ее hasMany моделей после его удаления, идея состоит в том, чтобы изменить атрибут Member и Game models studio_id на Studio объект по умолчанию, другими словами, изменить их прикрепленный Studio на другой, когда Studio который они belongTo получают, удаляется.

Вот код для попытки so

 $studio = Studio::find(Input::get('id'));
$games = $studio->games;
$members = $studio->members;
$merged_collection = $games->merge($members);

$merged_collection->each(function($item){
   global $studio;
   $item->studio()->detach($studio);
   $defStudio = Studio::find('5');
   $item->studio()->associate($defStudio);
   $item->save();
});

$studio->delete();
  

Метод есть как в игре, так и в модели-участнице

 public function studio(){
    return $this->belongsTo('Studio');
}
  

Все столбцы названы правильно, я могу получить все игры, связанные со студией, то же самое с играми и наоборот, однако, когда я пытаюсь выполнить код после выполнения проверки, и в противном случае я получаю ошибку

 Call to undefined method IlluminateDatabaseQueryBuilder::detach()
  

Я подумал, что, возможно, элементы, которые я пытаюсь использовать методом, detach() не являются экземплярами объектов, но, как я понял, всякий раз, когда я использую $collection->each(function($object){}) обозначенный как, я извлекаю экземпляры объектов из коллекции.

Я был бы признателен за любые указания или помощь. Спасибо.

Комментарии:

1. detach() является BelongsToMany методом. Что вам нужно, так это dissociate() laravel.com/api/4.2/Illuminate/Database/Eloquent/Relations /…

2. Спасибо @deczo ! Не упоминался в книге, которую я читаю по Laravel, однако я получаю ту же ошибку только с помощью dissociate (), что и неопределенный метод

3. Возможно, вы используете более старую версию фреймворка. Этот метод довольно новый. Вы можете использовать альтернативно $item->studio_id = null;

4. @deczo, который действительно решил проблему. Это довольно странно, поскольку используемой мной версии около месяца, спасибо.

5. @Pathros такого метода нет, вызовите dissociate аналог отношения или просто установите $related->FOREIGN_KEY = null и сохраните