2014-11-16 17 views
15

Mam wymowne modelu o nazwie Eloquent:Jak aliasu nazwy kolumny w wymowny

Products::where("actice", "=", true)->get()->toArray(); 

Teraz chcę dodać join-oświadczenie do niego, ja zdefiniowano scopeQuery z:

public function scopeJoinWithTags($query) 
    { 
     return $query->leftJoin("tags", "tags.id", "=", "products.tag_id"); 
    } 

Wtedy nasz główny zapytania zmienia się na:

Products::where("actice", "=", true)->joinWithTags->get()->toArray(); 

Co otrzymuję jest OK, to jest to, czego należy się spodziewać, ale chcę zmienić nazwę własność tabeli tagów do tag_name, jak mam to zrobić? To znaczy, mówię gdzieś w moim zapytaniu do:

tags.name AS tag_name 

tak, że w końcowej tablicy wynikowej zrobić:

$result[$i]['tag_name']; 

Choć teraz mam:

$result[$i]['name']; 
+0

możliwe powielać [http://stackoverflow.com/questions/ 17174837/laravel-4-eloquent-column-alias] (http://stackoverflow.com/questions/17174837/laravel-4-eloquent-column-alias) – itachi

Odpowiedz

24

Najprostszy sposób aby to zrobić, dodaj pola, które potrzebujesz, do metody get() i pseudonim, które chcesz tam zmienić.

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->get(['tags.name AS tag_name', 'products.*']) 
    ->toArray(); 
+0

Czy możesz mi powiedzieć, co jest drugim parametrem? "actice. *" '? Zmieniłem go na "produkty. *" I działa. –

+2

Ups, przepraszam, tak, powinny to być produkty. * Oznacza to po prostu uwzględnienie wszystkich pól w tabeli produktów. – turntwo

+0

Jest to metoda, której użyłem, ale należy zauważyć, że inne frameworki radzą sobie z tym natywnie z asocjacyjnymi tablicami. Szkoda, że ​​nie ma go w Laravel. – dKen

0

Na laravel 5.4 (nie wiem, czy wcześniejsza wersja zastosować również) można to zrobić za pomocą metody select:

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->select('tags.name AS tag_name', 'products.*') 
    ->get(); 

Przynajmniej dla mnie to jest czystsze.

+0

jak zmienić nazwę tabeli produktów? –

0

Istnieje również odkurzacz sposobem osiągnięcia tego celu

Można skorzystać z laravel mutatorów

public function getTagNameAttribute() 
{ 
    return $this->attributes['name']; 
} 

nadzieję, że to pomaga

Powiązane problemy