Laravel Eloquent 关系 keyBy()

Posted

技术标签:

【中文标题】Laravel Eloquent 关系 keyBy()【英文标题】:Laravel Eloquent relationship keyBy() 【发布时间】:2018-02-09 18:23:12 【问题描述】:

我想通过以下方式修改关系的结果集

我有这个数组

数组:11 [▼ “身份证” => 1 “用户 ID”=> 1 “名称” => “测试用例” "created_at" => "2017-08-25 17:12:26" "updated_at" => "2017-08-29 11:59:46" "hashid" => "5LOkAdWNDqgVomK" “用户” => 数组:8 [▶] “订单” => 数组:8 [▶] “分类” => 数组:2 [▼ 0 => 数组:9 [▼ “身份证” => 1 "case_id" => 1 “方法”=>“面部地图手册” “强” => 2.0 “动态” => 30.0 “精致”=> 50.0 “平静” => 18.0 "created_at" => "2017-08-31 11:00:00" "updated_at" => "2017-08-31 11:00:00" ] 1 => 数组:9 [▼ “身份证” => 2 "case_id" => 1 “方法”=>“采访” “强” => 20.0 “动态” => 25.0 “精致”=> 30.0 “平静” => 25.0 "created_at" => "2017-08-31 11:00:00" "updated_at" => "2017-08-31 11:00:00" ] ] “分类数据” => 数组:3 [▼ 0 => 数组:6 [▼ “身份证” => 1 "case_id" => 1 “类型”=>“面部点数” “数据” => 空 "created_at" => "2017-08-31 11:00:00" "updated_at" => "2017-08-31 11:00:00" ] 1 => 数组:6 [▼ “身份证” => 2 "case_id" => 1 “类型”=>“采访” “数据” => 数组:4 [▶] "created_at" => "2017-08-31 12:00:00" "updated_at" => "2017-08-31 11:00:00" ] 2 => 数组:6 [▶] ] “牙齿配置” => 阵列:6 [▶] ]

我想通过加载关系的列键(类型 OR 方法)映射 classificationclassification_data。 这是查询:

 $case = RCase::with(['user','order','classification','classificationData','teethConfiguration'])->where('id',$id)
                    ->first();

这是我迄今为止尝试过的

$case->classificationData =  $case->classificationData->keyBy('type')->toArray();

使用第一种方法,它们按类型排序,但即使尝试使用旧的 classification_data 也会保留在那里

 unlink($case->classification_data) 
这不是大问题...我也可以使用 分类 来做到这一点,但数据保持不变。

有什么方法可以直接在加载的关系模型中执行 keyBy() 吗?提前致谢

php版本:7.1 Laravel 版本:5.4.38 操作系统:Ubuntu 16.04 LTS

【问题讨论】:

看看this answer。 【参考方案1】:

您可以使用以下代码替换关系:

$case->setRelation("classification_data",$case->classificationData->keyBy('type'));

要替换关系,您必须提供相同的关系名称,否则 laravel 将创建另一个。

当你这样做时:

$case->classificationData = something

您实际上是在向模型对象添加一个新属性。

【讨论】:

以上是关于Laravel Eloquent 关系 keyBy()的主要内容,如果未能解决你的问题,请参考以下文章

使用 keyby 收集方法检索 eloquent api 资源

Laravel 关系上的枢轴关系 (Eloquent)

如何在 Laravel/Eloquent 中获得完整的关系

深入理解 Laravel Eloquent——模型间关系(关联)

laravel 返回与 eloquent 和 laravel 的关系

在最近的关系记录中搜索 - Laravel (Eloquent)