Double WHERE IN与Eloquent有很多关系

时间:2018-04-14 01:32:30

标签: php laravel eloquent

我想通过Eloquent与我的关系来检索信息。

现在是查询:

SELECT `elements`.*, `stuff_equipement_stats_elements`.`id_stats` AS 
`pivot_id_stats`, `stuff_equipement_stats_elements`.`id_elements` AS 
`pivot_id_elements`
FROM `elements`
INNER JOIN `stuff_equipement_stats_elements` ON `elements`.`id_elements` = 
`stuff_equipement_stats_elements`.`id_elements`
WHERE `stuff_equipement_stats_elements`.`id_stats` IN (1, 4, 10, 12, 13, 15, 
20, 21, 23, 29, 32)

我希望得到这样的查询:

SELECT `elements`.*, 
`stuff_equipement_stats_elements`.`id_stats`,
`stuff_equipement_stats_elements`.`id_equipement` AS `pivot_id_stats`, 
`stuff_equipement_stats_elements`.`id_elements` AS `pivot_id_elements`
FROM `elements`
INNER JOIN `stuff_equipement_stats_elements` ON `elements`.`id_elements` = 
`stuff_equipement_stats_elements`.`id_elements`
**INNER JOIN equipement ON equipement.id_equipement = 
stuff_equipement_stats_elements.id_equipement**
WHERE `stuff_equipement_stats_elements`.`id_stats` IN (1, 4, 10, 12, 13, 15, 
20, 21, 23, 29, 32) **AND stuff_equipement_stats_elements.id_equipement IN 
(11, 14, 19, 27)**

我有一个由4个键组成的实体。从现在起,我必须添加一个关系“equipement”告诉Eloquent他必须从两边检索...我尝试了不同的东西,但没有结果。

以下是我的模特:

StuffModel.php

public function equipements(){
    return $this->belongsToMany(EquipementModel::class, 
'stuff_equipement', 'id_stuff','id_equipement')->withPivot('side');
}

EquipementModel.php

public function stats(){
    return $this->belongsToMany(StatsModel::class, 'equipement_stats', 
'id_equipement','id_stats')->withPivot('poids_equipement_stats')- 
>withPivot('nb_elem_aleatoire');
}

StatsModel.php

public function elema(){
    return $this->belongsToMany(ElementModel::class, 
'stuff_equipement_stats_elements', 'id_stats','id_elements');
}

BuilderController.php

StuffModel::with('equipements.stats.elema')>where('lien_stuff',$id)->first()

我试图在设备和元素思维之间添加关系Eloquent会知道这种关系,但没有成功......就像这样:

    public function elem(){
    return $this->belongsToMany(ElementModel::class, 'stuff_equipement_stats_elements', 'id_stats','id_elements');
}

谢谢!

编辑:

这是我的关系:

Stuff belongsToMany Equipement, Equipement belongsToMany Stats,

Stats和Equipements一起有Elements(我们必须知道bot)

我不明白如何精确测试elem()它必须搜索统计数据(这就是现在正在做的)和设备。

编辑2:

这是我的图表。我现在正在做的是为所定义的东西获得所有设备。通过我的设备,我可以知道这些有关“东西”的所有统计数据。这没关系。

现在我必须检索元素但是在统计和设备的结果中(参见我的第二个查询)

这是我的图表:

enter image description here

stuff_equipement_stats_elements:

id_stuff,id_equipement,id_stats,id_elements是主键。

我可以根据其他三个键添加一个元素。我现在想要通过eloquent检索这个表,但是有一个关于统计数据和设备上的where子句

编辑:

    "id_stats":32,
"n_stats":"Mastery",
"image_stats":null,
"pivot":{  
   "id_equipement":11,
   "id_stats":32,
   "weight":"235",
   "rand-elem":"3"
},
"elements":[  
   {  
      "id_elements":2,
      "n_elements":"Feu",
      "pivot":{  
         "id_stats":32,
         "id_elements":2,
         "id_equipement":15
      }
   },
   {  
      "id_elements":3,
      "n_elements":"Eau",
      "pivot":{  
         "id_stats":32,
         "id_elements":3,
         "id_equipement":13
      }
   }
]

这里我得到的JSON响应,我必须使用新的数据透视过滤透视父节点(来自前一个属于很多),否则我将没有良好的响应

1 个答案:

答案 0 :(得分:1)

<强>更新: 最后,我能理解你的问题:P。 看起来你不能直接从Stuff模型中获取所有元素,因为stuff_id和amp;会有很多重复的键。 stuff_equipement_stats_elements表中的element_id。

但是,我认为可能有另一种方法,你可以试试:

创建一个模型StuffEquipementStatsElements:

class StuffEquipementStatsElements
{
    public function stuff()
    {
        return $this->belongsTo('App\Stuff','stuff_id');
    }

    public function elements()
    {
        return $this->belongsTo('App\Element','elemnent_id');
    }
}

在您的控制器中:

StuffEquipementStatsElements::with('stuff')->with('elements')->where('stuff_id',$id)->get();

<强> ORIGINAL

我尝试绘制图表以便更轻松地理解您的问题: enter image description here