Конструктор запросов Laravel. Столбец если не null = 1 else = 0 в методе select

Конструктор запросов Laravel. Столбец если не null = 1 else = 0 в методе select

07.01.2020 07:58:42 Просмотров 26 Источник

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

Поэтому я хотел бы сделать что-то подобное.

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

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

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

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

public function table_2($userId)
{
    return $this->hasOne(Table_2::class....)->where(user_id, "=", userId);
}
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59632860/laravel-query-builder-column-if-not-null-1-else-0-in-select-method#comment105428255_59632860
У вас может быть законная причина для выполнения этого необработанного запроса, но есть ли причина, по которой вы не используете красноречивые отношения?
https://stackoverflow.com/questions/59632860/laravel-query-builder-column-if-not-null-1-else-0-in-select-method#comment105430349_59632860
@Spholt я отредактировал вопрос, чтобы объяснить, почему я не могу использовать красноречивые отношения

Ответы - Конструктор запросов Laravel. Столбец если не null = 1 else = 0 в методе select / Laravel query builder. Column if not null = 1 else = 0 in select method

Bharat Rawat

07.01.2020 08:23:23

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

https://stackoverflow.com/questions/59632860/laravel-query-builder-column-if-not-null-1-else-0-in-select-method/59633224#comment105429795_59633224
Я работаю с устаревшим кодом и вроде как должен делать это таким образом без красноречивых отношений в данном случае
https://stackoverflow.com/questions/59632860/laravel-query-builder-column-if-not-null-1-else-0-in-select-method/59633224#comment105479549_59633224
Или же можно создать связь с параметром laravel 5.2?
LuongPs

08.01.2020 06:22:43

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

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

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

Является ответом!
Marek Barta

12.01.2020 02:19:46

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

$queryBuilder->selectRaw("
    table_one.*,
    CASE WHEN table_two.id IS NOT NULL THEN 1 ELSE 0 END AS tableTwoPresent
");
Закрыть X