我想通过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:
这是我的图表。我现在正在做的是为所定义的东西获得所有设备。通过我的设备,我可以知道这些有关“东西”的所有统计数据。这没关系。
现在我必须检索元素但是在统计和设备的结果中(参见我的第二个查询)
这是我的图表:
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响应,我必须使用新的数据透视过滤透视父节点(来自前一个属于很多),否则我将没有良好的响应
答案 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 强>: