我在链接关系方面遇到一些麻烦。我想将其中的三个连接起来,但这不能正常工作:
return UserModel::with('cars.pieces.attributes')
我不仅必须检查零件的属性,还必须检查cars.pieces给出的结果。我必须既知道零件又知道汽车,以赋予它们良好的属性
我想用他选择的汽车来检索用户,然后再选择汽车的零件以及这些零件的属性。所有这些东西都是用户选择的。
只有cars.pieces.
个用户,然后是汽车阵列,然后是该汽车的阵列。当我添加属性时,我的属性不是针对用户的汽车,而是针对任何车辆的属性。
似乎该关系只是在寻找先前的关系,而不是整个数据包。
UserModel.php
public function cars(){
return $this->belongsToMany(CarsModel::class, 'user_cars', 'id_user','id_cars');
}
然后在CarsModel.php中
public function pieces(){
return $this->belongsToMany(PiecesModel::class, 'cars_pieces', 'id_cars','id_pieces')
}
最后在PiecesModel.php中:
public function attributes(){
return $this->belongsToMany(AttributeModel::class, 'user_cars_pieces_attributes', 'id_attribute', 'id_piece')
}
最后一个实体使用4个字段作为主键:
id_user, id_car, id_attribute, id_piece
我的关系可能是这样的:
有什么方法可以为用户检索汽车的属性?
感谢您的帮助!
编辑:我有一个主意。我可以只检索汽车,然后根据id_pieces和id_cars的where子句检查每辆汽车的属性,然后合并到我的原始数组中,但这不是有效的imo
答案 0 :(得分:1)
首先,您在attributes()
函数中交换了外键。应该是:
public function attributes(){
return $this->belongsToMany(AttributeModel::class, 'user_cars_pieces_attributes','id_piece', 'id_attribute');
}
第二,您没有指定要在哪个模型上定义每个关系,而是您可能希望使用hasMany
。例如,用户属于多辆汽车(然后像您当前使用的那样使用belongsToMany
)还是用户有多辆汽车,即用户属于多辆汽车(然后使用hasMany
)?>