Laravel雄辩地检查以前的热切负荷关系

时间:2019-01-25 13:51:59

标签: php mysql database laravel

我在链接关系方面遇到一些麻烦。我想将其中的三个连接起来,但这不能正常工作:

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

我的关系可能是这样的:

enter image description here

有什么方法可以为用户检索汽车的属性?

感谢您的帮助!

编辑:我有一个主意。我可以只检索汽车,然后根据id_pieces和id_cars的where子句检查每辆汽车的属性,然后合并到我的原始数组中,但这不是有效的imo

1 个答案:

答案 0 :(得分:1)

首先,您在attributes()函数中交换了外键。应该是:

public function attributes(){
    return $this->belongsToMany(AttributeModel::class, 'user_cars_pieces_attributes','id_piece', 'id_attribute');
}

第二,您没有指定要在哪个模型上定义每个关系,而是您可能希望使用hasMany。例如,用户属于多辆汽车(然后像您当前使用的那样使用belongsToMany)还是用户有多辆汽车,即用户属于多辆汽车(然后使用hasMany)?