2017-01-14 18 views
0

verknüpften Tabelle primären Wiederholen Ich habe zwei Modelle:JSON Daten aus zwei Tabellen ohne Schlüssel

Category Modell hat: id PRIMARY_KEY, category_name, ...

Item Modell hat: id PRIMARY_KEY, item_name, category_id (ist id auf Kategorie Tabelle), ...

ich möchte diese JSON-Antwort erreichen:

Item: 
{ 
    "id": 1, 
    "item_name": "some item name", 
    "category": { 
     "id": "5", 
     "category_name": "some category name" 
    } 
} 

Bisher habe ich es geschafft, nur Reaktion zu erreichen:

{ 
    "id": 1, 
    "item_name": "some item name", 
    "category_id": "5", // i dont want it to appear here! 
    "category": { 
     "id": "5", 
     "category_name": "some category name" 
    } 
} 

Mit query:

$data = Item::select('id', 'item_name', 'category_id')->with(['category' => function ($query) { 
      $query->select('id', 'category_name'); 
     }])->get(); 
return response()->json($data); 

Ich versuchte select('id', 'item_name') statt select('id', 'item_name', 'category_id'), aber es funktioniert nicht, da es für with 'category_id' erforderlich arbeiten. Irgendwelche sauberen Lösungen dazu?

Antwort

0

Die Lösung war es hidden in Collection zu machen:

$data = Item::select('id', 'item_name', 'category_id')->with(['category' =>  function ($query) { 
      $query->select('id', 'category_name'); 
     }])->get()->makeHidden('category_id'); 
return response()->json($data); 
0

Ja, Sie nicht category_id entfernen kann, wie es um die Beziehung zu erstellen benötigt wird. Sie können stattdessen nach der Abfrage so etwas tun und $data setzen.

$response = []; 
$data->each(function ($value) use (&$response) { // pass $response by reference 
    unset($value->category_id); 
    $response[] = $value; 
}); 
return response()->json($response);