2017-11-04 2 views
2

Ich habe zwei Tabellen (n: m) durch einen Drehtisch verbunden wie folgt aus:Fügen Sie ein zusätzliches Feld auf eine Anfrage

Rezepte (id, name)

Benutzer (id, playerId)

recipe_user (recipeId, userId)

im Moment habe ich die Daten von meinem Handy-App wie/api/v1/Rezepte und ge holen t eine Liste aller Rezepte.

Jetzt möchte ich einen Bereich hinzufügen, wo ich die Player-ID des App-Benutzers übergeben (Kopfdaten der API-Anfrage übergeben) und ein is_bookmarked Feld zum Ergebnis der Abfrage hinzufügen kann. Am Ende sollte es so etwas wie diese:

[ 
{ 
    "id": 1, 
    "name": "Pizza", 
    "is_bookmarked": 1 
}, 
{ 
    "id": 1, 
    "name": "Pizza", 
    "is_bookmarked": 1 
} 
] 

Wie kann ich meine Abfrage dieses zusätzlichen wählen „Inject“?

Im Moment der Abfrage ganz einfach sein könnte: Recipe::get()

+1

können Sie Ihre db-Abfrage posten? –

+0

Im Moment könnte die Abfrage recht einfach sein: 'Recipe :: get()' – rakete

Antwort

1

Sie sollten:

$temp = App\Recipe::first(); 
$temp->is_bookmarked = 1; 
return $temp; 
+0

Das hat mein Problem gelöst. Aber ich musste ein zusätzliches leftJoin hinzufügen, weil die player_id nicht die ID in der Datenbank ist und in der Tabelle user (id, player_id) gespeichert ist. – rakete

0

unter der Annahme seiner einen beliebigen Wert; für eloquent können Sie das Attribut direkt mit dem Modellinstanz wie solche hinzufügen:

$bookmark = $request->hasHeader('user_id'); 
$data = $recipes->map(function($recipe) use($bookmark) { 
    if ($bookmark === true) { 
     $bookmark->push(['is_bookmarked' => 1]); 
    } 

    return $bookmark; 
}); 
0

jede Instanz Rezept Angenommen, Sie ist eine Sammlung zu erhalten, können Sie die is_bookmarked Spalte hinzufügen Join Tabellen zuerst und fügen Sie dann is_bookmarked Spalte manuell zur Abfrage hinzu. Hier sehen Sie ein Beispiel, das auf den von Ihnen bereitgestellten Informationen basiert.

$userId = 1; // Get an app user id. 

$recipes = Recipe::select('recipes.*') 
    ->leftJoin('recipe_user', function ($join) use ($userId) { 
     return $join 
      ->on('recipe_user.recipeId', '=', 'recipes.id') 
      ->on('recipe_user.userId', '=', DB::raw($userId)); 
    }) 
    ->addSelect(DB::raw('recipe_user.recipeId AS is_bookmarked')) 
    ->get(); 
Verwandte Themen