2017-08-31 28 views
0

Ich will die Ergebnismenge der Beziehung in der folgenden Weise modifizierenLaravel Eloquent Beziehung keyBy()

Ich habe dieses Array

 

    array:11 [▼ 
     "id" => 1 
     "user_id" => 1 
     "name" => "Test Case" 
     "created_at" => "2017-08-25 17:12:26" 
     "updated_at" => "2017-08-29 11:59:46" 
     "hashid" => "5LOkAdWNDqgVomK" 
     "user" => array:8 [▶] 
     "order" => array:8 [▶] 
     "classification" => array:2 [▼ 
     0 => array:9 [▼ 
      "id" => 1 
      "case_id" => 1 
      "method" => "facial_map_manual" 
      "strong" => 2.0 
      "dynamic" => 30.0 
      "delicate" => 50.0 
      "calm" => 18.0 
      "created_at" => "2017-08-31 11:00:00" 
      "updated_at" => "2017-08-31 11:00:00" 
     ] 
     1 => array:9 [▼ 
      "id" => 2 
      "case_id" => 1 
      "method" => "interview" 
      "strong" => 20.0 
      "dynamic" => 25.0 
      "delicate" => 30.0 
      "calm" => 25.0 
      "created_at" => "2017-08-31 11:00:00" 
      "updated_at" => "2017-08-31 11:00:00" 
     ] 
     ] 
     "classification_data" => array:3 [▼ 
     0 => array:6 [▼ 
      "id" => 1 
      "case_id" => 1 
      "type" => "facial_points" 
      "data" => null 
      "created_at" => "2017-08-31 11:00:00" 
      "updated_at" => "2017-08-31 11:00:00" 
     ] 
     1 => array:6 [▼ 
      "id" => 2 
      "case_id" => 1 
      "type" => "interview" 
      "data" => array:4 [▶] 
      "created_at" => "2017-08-31 12:00:00" 
      "updated_at" => "2017-08-31 11:00:00" 
     ] 
     2 => array:6 [▶] 
     ] 
     "teeth_configuration" => array:6 [▶] 
    ] 

I Klassifizierung und classification_data säulenchromatographisch abbilden wollen Schlüssel (Typ OR-Methode), die geladene Beziehungen sind. Diese ist die Abfrage:

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

Dies ist, was ich versuchte, so weit

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

Mit der ersten Methode, die sie nach Typ geordnet sind aber die alten classification_data bleibt es auch dann, wenn versuchen,

 unlink($case->classification_data)
Dies ist nicht das große Problem ... Ich kann dies auch mit Klassifizierung tun, aber die Daten bleiben gleich.

Gibt es irgendeine Methode, mit der ich keyBy() direkt in das geladene Beziehungsmodell tun kann? Vielen Dank im Voraus

 
PHP Version: 7.1 
Laravel Version: 5.4.38 
OS: Ubuntu 16.04 LTS 

Antwort

0

Sie können die Beziehung mit diesem Code ersetzen:

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

die Beziehung ersetzen Sie die gleiche Beziehung Namen angeben muss oder Laravel wird eine andere erstellen.

Wenn Sie das tun:

$case->classificationData = something 

Sie fügen tatsächlich ein neues Attribut zu dem Modellobjekt.

Verwandte Themen