我遇到了问题,正在寻找一个很好的解决方案。
我有这些数据库表:
GameObject.php:
public function gameObjectAttributes()
{
return $this->belongsToMany('App\Models\GameObjectAttribute')->withPivot('value')->withTimestamps();
}
GameObjectAttribute.php:
public function gameObjects()
{
return $this->belongsToMany('App\Models\GameObject');
}
现在我正在尝试获取GameObjectType的所有GameObject并使用pivot列'value'过滤结果。
$this->model->where('name', $gameObjectTypesEnum)->first()->gameObjects()->join('game_object_game_object_attribute', 'game_objects.id', '=', 'game_object_game_object_attribute.game_object_id')->where('value', '=', '4')->get());
我在这里使用了一个联接,但有没有办法用雄辩的关系来做呢?
这让我回到了'部队'类型的所有游戏对象:
$this->model->where('name', $gameObjectTypesEnum)->first()->gameObjects()->get();
'gameObjects()'给我一个集合,在这里我不能称之为
$this->model->where('name', $gameObjectTypesEnum)->first()->gameObjects()->withPivot('value', 3)->get();
OR
$this->model->where('name', $gameObjectTypesEnum)->first()->gameObjects()->gameObjectAttributes->wherePivot('value', 3)->get();
在这里,我可以遍历集合'gameObjects()'并使用foreach检查枢轴是否具有值= 3但是必须有比这更好的解决方案。我是laravel的新手..
另外
我试着
通过GameObjectType =>获取所有GameObjects返回一个集合**
GameObjectType :: where('name',$ gameObjectTypesEnum) - > first() - > gameObjects()
然后我尝试过滤枢轴以仅获得具有给定GameObjectType和枢轴值的GameObjects,例如3。
- > join('game_object_game_object_attribute','game_objects.id','=','game_object_game_object_attribute.game_object_id') - > where('value','=','4') - &gt ;得到());
我做错了,或者用Eloquent做不到这个: - (
提前谢谢大家。
祝你好运
答案 0 :(得分:2)
你可以这样做
$gameObjects = GameObject::where('name', $gameObjectTypesEnum)->whereHas('gameObjectAttributes', function($query)
{
$query->where('value', 3);
})->get();
答案 1 :(得分:0)
如果我没有误导它,
->wherePivot('value',4)
除了您的查询之外,还有这种加入的雄辩方式。