![](/img/trans.png)
[英]How to create relations in laravel with 3 relations in the pivot table?
[英]How to get values from hasMany relations with PIVOT table in laravel?
我有下表:
用户
cattle_types
特性
properties_cattle_types
我通过用户 model 中定义的 hasMany 关系获取与用户相关的所有牛类型:
Auth::user()->cattleTypes
但我还需要对 pivot 表properties_cattle_types中定义的所有注释的“数量”求和。
我不知道如何在一个查询中全部使用,以便接近每一个牛列是列“数量”。
例如现在在结果中我有一个音符:
"id" => 1
"user_id" => 1
"name" => "Branders"
但我想要
"id" => 1
"user_id" => 1
"name" => "Branders"
"quantity" => "560"
或者大约是这样。
我已经通过以下方式设法获得了几乎我需要的东西:
$cattleTypesForCurrentUser = Auth::user()->cattleTypes;
$totalCattleTypesForCurrentUser = [];
foreach ($cattleTypesForCurrentUser as $cattleTypeForCurrentUser) {
$totalCattleTypesForCurrentUser[] =
DB::select('SELECT ( SELECT `name` FROM cattle_types WHERE id = ? )
as `name`,
( SELECT SUM(quantity) FROM properties_cattle_types WHERE cattle_type_id IN (?) )
as `quantity`',
[$cattleTypeForCurrentUser->id, $cattleTypeForCurrentUser->id]
);
}
dd($totalCattleTypesForCurrentUser);
但我建议这种方式很糟糕。 我在foreach的数据库中做了太多查询。 我怎样才能以正确的方式做到这一点??? 请同事帮忙!(
我会进一步规范化您的表格。 就目前情况而言,如果您有两个用户,每个用户都有(我不知道)根西岛奶牛,那么您的牛类型表中将有多个条目用于同一类型的牛。
相反,使用下表会更好:
用户
cattle_types
users_cattle_types
事物属性方面的原则是相同的。
然后在您的用户 model 中,您将使用 hasManyThrough 关系将您的用户与其牛类型相关联。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.