繁体   English   中英

如何从laravel中的PIVOT表的hasMany关系中获取值?

[英]How to get values from hasMany relations with PIVOT table in laravel?

我有下表:

用户

  • ID
  • 姓名

cattle_types

  • ID
  • 用户身份
  • 姓名

特性

  • ID
  • 用户身份
  • 姓名

properties_cattle_types

  • ID
  • cattle_type_id
  • property_id
  • 数量

我通过用户 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的数据库中做了太多查询。 我怎样才能以正确的方式做到这一点??? 请同事帮忙!(

我会进一步规范化您的表格。 就目前情况而言,如果您有两个用户,每个用户都有(我不知道)根西岛奶牛,那么您的牛类型表中将有多个条目用于同一类型的牛。

相反,使用下表会更好:

用户

  • ID
  • 姓名

cattle_types

  • ID
  • 姓名

users_cattle_types

  • ID
  • user_id //用户id 的外键
  • cattle_type_id // cattle_types上 id 的外键
  • 数量 // 示例

事物属性方面的原则是相同的。

然后在您的用户 model 中,您将使用 hasManyThrough 关系将您的用户与其牛类型相关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM