Laravel Eloquent 关系 keyBy()

Pet*_*nev 5 php laravel eloquent laravel-5.4

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

我有这个数组

    数组:11 [?
      “id” => 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 [?
          “id” => 1
          “case_id” => 1
          “方法” => “facial_map_manual”
          “强”=> 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 [?
          “id” => 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 [?
          “id” => 1
          “case_id” => 1
          “类型”=>“面部积分”
          “数据” => 空
          "created_at" => "2017-08-31 11:00:00"
          "updated_at" => "2017-08-31 11:00:00"
        ]
        1 => 数组:6 [?
          “id” => 2
          “case_id” => 1
          “类型”=>“采访”
          “数据”=> 数组:4 [?]
          "created_at" => "2017-08-31 12:00:00"
          "updated_at" => "2017-08-31 11:00:00"
        ]
        2 => 数组:6 [?]
      ]
      “teeth_configuration” => 数组:6 [?]
    ]

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

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

这是我到目前为止尝试过的

$case->classificationData =  $case->classificationData->keyBy('type')->toArray();
Run Code Online (Sandbox Code Playgroud)

使用第一种方法,它们按类型排序,但旧的分类数据仍然存在,即使尝试

 取消链接($case->classification_data) 
这不是大问题......我也可以通过分类来做到这一点,但数据保持不变。

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

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

Art*_*cos 3

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

$case->setRelation("classification_data",$case->classificationData->keyBy('type'));
Run Code Online (Sandbox Code Playgroud)

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

当你这样做时:

$case->classificationData = something
Run Code Online (Sandbox Code Playgroud)

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