Laravel построитель запросов. Столбец, если не ноль = 1, иначе = 0 в методе выбора - PullRequest
0 голосов
/ 07 января 2020

Я использую Laravel и его \Illuminate\Database\Eloquent\Builder. Я хотел бы выбрать все столбцы из «table_1» и иметь пользовательский столбец «is_table_2_present», значение которого будет равно 1 или 0, если (table_1_id! = Null).

Так что я хотел бы сделать что-то подобное.

$queryBuilder->leftJoin("table_2"....)

$queryBuilder->select([
    "table_1.*",
    "is_table_2_present" = (table_2_id != null) ? 1 : 0,
]);

Я пытался найти ответ, но без особого успеха. Поэтому я хотел бы спросить, возможно ли что-то подобное?

Причина, по которой я не могу использовать отношения Eloquent, заключается в том, что мне нужны отношения с параметром. И это невозможно в laravel 5.2, верно?

public function table_2($userId)
{
    return $this->hasOne(Table_2::class....)->where(user_id, "=", userId);
}

Ответы [ 3 ]

1 голос
/ 08 января 2020

Вы можете использовать selectRaw (), я думаю, это будет:

$queryBuilder->selectRaw(
             <<<EOT
               table_1.*,
               if(table_2_id != ?, 1, 0) as is_table_2_present, 
             EOT,
             [null]
             );

В приведенном выше коде я использовал связывание, чтобы избежать SQL инъекции.

1 голос
/ 07 января 2020

Концептуально каждая таблица связана с моделью. Попробуйте выразительные отношения между моделями двух таблиц, которые вы пытаетесь запросить.

0 голосов
/ 12 января 2020

Так как этот вопрос вроде как умер, какое-то время не отвечал, пока я решил его с помощью selectRaw () Но все еще в поисках более аккуратного решения.

$queryBuilder->selectRaw("
    table_one.*,
    CASE WHEN table_two.id IS NOT NULL THEN 1 ELSE 0 END AS tableTwoPresent
");
...