#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
и сохраните