php - Laravel Eloquent 检查先前的急切加载关系

标签 php mysql database laravel

我在链接关系方面遇到一些麻烦。我想链接其中三个,但这无法正常工作:

return UserModel::with('cars.pieces.attributes')

我不仅必须检查部件的属性,还必须检查 cars.pieces 给出的结果。我必须了解零件和汽车才能赋予良好的属性

我想检索用户及其选择的汽车,然后检索汽车的部件以及这些部件的属性。所有这些都是由用户选择的。

只有cars.pieces。我有我的用户,然后是汽车数组,然后是这辆车的碎片数组。当我添加属性时,我的属性不是用户汽车的属性,而是无论是什么汽车的属性。

看起来该关系只是在寻找先前的关系,而不是整个数据包。

用户模型.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 子句检查它们的属性,然后合并到我的原始数组中,但在我看来,这效率不高

最佳答案

首先,您交换了 attributes() 中的外键功能。应该是:

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

其次,您没有指定在哪些模型上定义每个关系,但您可能更想使用 hasMany 。例如,一个用户是否属于许多汽车(然后像现在一样使用 belongsToMany ),或者一个用户是否拥有许多汽车,即许多汽车属于一个用户(然后使用 hasMany )?

关于php - Laravel Eloquent 检查先前的急切加载关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366667/

相关文章:

PHP 到 MySQL 连接 : wait until a connection is available, 而不是抛出 "max_user_connections exceeded"错误?

PHP 将八进制字符转换为字符串

php - MySql查询优化方法

mysql - 如何在mysql的同一个表中选择更新?

java - 将 derby 数据库文件夹作为远程数据库运行

php - 将 Laravel 5.4 Markdown 模板保存到数据库并从中检索

php - 使用wordpress处理ajax请求响应

mysql - 为什么我的 MySQL 唯一键失败?

mysql - DB Complex 增量计数器

database - 当浏览器重新加载/返回时,如何防止再次写入数据库?