Laravel Eloquent Pivot表由对象集合

时间:2018-06-14 11:35:53

标签: laravel eloquent

我遇到了问题,正在寻找一个很好的解决方案。

我有这些数据库表:

  • game_objects
  • game_object_attributes
  • game_object_game_object_attribute(pivot)

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的新手..

另外

我试着

  1. 通过GameObjectType =>获取所有GameObjects返回一个集合**

    GameObjectType :: where('name',$ gameObjectTypesEnum) - > first() - > gameObjects()

  2. 然后我尝试过滤枢轴以仅获得具有给定GameObjectType和枢轴值的GameObjects,例如3。

    - > join('game_object_game_object_attribute','game_objects.id','=','game_object_game_object_attribute.game_object_id') - > where('value','=','4') - &gt ;得到());

  3. 我做错了,或者用Eloquent做不到这个: - (

    提前谢谢大家。

    祝你好运

2 个答案:

答案 0 :(得分:2)

你可以这样做

 $gameObjects = GameObject::where('name', $gameObjectTypesEnum)->whereHas('gameObjectAttributes', function($query)
    {
        $query->where('value', 3); 
    })->get();

答案 1 :(得分:0)

如果我没有误导它,

->wherePivot('value',4) 

除了您的查询之外,还有这种加入的雄辩方式。