web-dev-qa-db-fra.com

Laravel joindre les requêtes AS

Toute façon de définir un AS pour une requête ??

J'ai essayé ce qui suit:

$data = News::order_by('news.id', 'desc')
    ->join('categories', 'news.category_id', '=', 'categories.id')
    ->left_join('users', 'news.user_id', '=', 'users.id') // ['created_by']
    ->left_join('users', 'news.modified_by', '=', 'users.id') // ['modified_by']
    ->paginate(30, array('news.title', 'categories.name as categories', 'users.name as username'));

Le problème est que ['name'] des catégories sera remplacé par celui de users. Une façon de les avoir avec des noms différents?

Ayant les alias ci-dessus ... comment puis-je créer un alias où les deux jointures renvoient users.name?

21
Alex

paginate() le second paramètre de la méthode accepte array de colonnes de table à sélectionner dans la requête. Donc cette partie:

paginate(30, array('news.title, category.name'));

doit être comme ceci:

paginate(30, array('news.title', 'category.name'));

MISE À JOUR (après avoir modifié la question)

Essaye ça:

->paginate(30, array('news.title', 'categories.name as category_name', 'users.name as user_name'));

MISE À JOUR 2 (après avoir changé la question, encore)

Vous pouvez également utiliser un alias sur les tables:

$data = News::order_by('news.id', 'desc')
    ->join('categories', 'news.category_id', '=', 'categories.id')
    ->join('users as u1', 'news.user_id', '=', 'u1.id') // ['created_by']
    ->join('users as u2', 'news.modified_by', '=', 'u2.id') // ['modified_by']
    ->paginate(30, array('news.title', 'categories.name as categories', 'u1.name as creater_username', 'u2.name as modifier_username'));
65
aykut

La réponse la plus simple et la plus claire à cette question est et ce que je cherchais, Eloquent prend en charge les alias directement avec les noms de table ou les colonnes, par exemple:

$users = DB::table('really_long_table_name AS t')
           ->select('t.id AS uid')
           ->get();
1
justnajm