Laravel:调用未定义的方法Illumb\Database\Query\Builder::detach()
我正在尝试删除一个对象模型Laravel:调用未定义的方法Illumb\Database\Query\Builder::detach(),laravel,eloquent,Laravel,Eloquent,我正在尝试删除一个对象模型Studio,该对象模型hasManymodelMember和hasManymodelGame并在删除后为其hasMany模型设置行为,想法是将成员和游戏模型studio\u id属性更改为默认的studio对象,换句话说,当studio所属的studio被删除时,将其附加的studio更改为另一个 下面是尝试这样做的代码 $studio = Studio::find(Input::get('id')); $games = $studio->games; $mem
Studio
,该对象模型hasMany
modelMember
和hasMany
modelGame
并在删除后为其hasMany
模型设置行为,想法是将成员
和游戏
模型studio\u id属性更改为默认的studio
对象,换句话说,当studio
所属的studio
被删除时,将其附加的studio
更改为另一个
下面是尝试这样做的代码
$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');
}
所有列的名称都正确,我能够检索与studio关联的所有游戏,游戏也是如此,反之亦然,但是当我在进行验证后尝试执行代码时,否则就会出现错误
Call to undefined method Illuminate\Database\Query\Builder::detach()
我认为我尝试使用方法detach()
的项可能不是对象实例,但正如我所理解的,每当我使用$collection->each(function($object){})
时,我都会检索集合中的对象实例
我将感谢任何形式的指导或帮助。
谢谢。
detach()
是belongTomany
方法。您需要的是解离()
谢谢@deczo!在我正在阅读的关于Laravel的书中没有提到,但是我在dissection()中遇到了与未定义方法相同的错误,可能您使用的是旧版本的框架。这种方法很新。您也可以使用$item->studio\u id=null代码>@deczo解决了这个问题。这很奇怪,因为我使用的版本大约有一个月了,谢谢。@Pathros没有这样的方法,对关系的对应项调用dissection
,或者简单地设置$related->FOREIGN\u KEY=null
并保存