php - 如何从 laravel 中与 PIVOT 表的 hasMany 关系中获取值?
问题描述
我有以下表格:
用户
- ID
- 姓名
牛类型
- ID
- 用户身份
- 姓名
特性
- ID
- 用户身份
- 姓名
properties_cattle_types
- ID
- 牛类型ID
- property_id
- 数量
我通过用户模型中定义的 hasMany 关系获取所有与用户相关的牛类型:
Auth::user()->cattleTypes
但我还需要对数据透视表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
- 姓名
牛类型
- ID
- 姓名
users_cattle_types
- ID
- user_id //用户id 的外键
- 牛类型ID //牛类型上id的外键
- 数量 // 示例
事物的属性方面的原理是相同的。
然后在您的用户模型中,您将使用 hasManyThrough 关系将您的用户与他们的牛类型相关联。
推荐阅读
- ssh - 通过 ssh 到分布式 Dask 工作人员的 IPython 接口产生“连接被拒绝”
- html - 松鼠模板四舍五入
- sql-server - docker容器中的.Net Core应用程序无法连接到SQL Server
- javascript - JavaScript - 没有在文本手风琴中显示标题
- php - PHP QuickBooks Web 连接器 conolibyte - 无需数据交换
- javascript - WordPress 块注册 ES6 /ESNext Uncaught SyntaxError: Unexpected token <
- ios - 使用 xcodebuild 和 Xcode 的设备架构中缺少 armv7s
- swift - LLDB“已应用修复”似乎对我想要打印的内容不正确
- powershell - 如何计算Powershell中两个数字之间差异的百分比
- return - 哪种返回列表方式更好?本地新或本地清除