Laravel присоединяется к запросам AS - программирование
Подтвердить что ты не робот

Laravel присоединяется к запросам AS

Любой способ определения AS для запроса

Я пробовал следующее:

$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'));

Проблема заключается в том, что ['name'] из категорий будет заменяться на один из users. Любой способ иметь их с разными именами?

Имея псевдонимы выше... как я могу создать псевдоним, где оба соединения возвращаются users.name?

4b9b3361

Ответ 1

paginate() метод второй параметр принимает массив столбцов таблицы для выбора в запросе. Итак, эта часть:

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

должно быть следующим:

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

ОБНОВЛЕНИЕ (после того, как вы изменили вопрос)

Попробуйте следующее:

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

ОБНОВЛЕНИЕ 2 (после того, как вы снова изменили вопрос)

Вы также можете использовать псевдоним для таблиц:

$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'));

Ответ 2

Более простой и понятный ответ на этот вопрос и то, что я искал, это то, что Eloquent поддерживает псевдонимы непосредственно с именами таблиц или столбцами, например:

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