Laravel 查询生成器。 select 方法中的列 if not null = 1 else = 0

Laravel query builder. Column if not null = 1 else = 0 in select method

我使用 Laravel 及其 \Illuminate\Database\Eloquent\Builder。我想 select 来自 "table_1" 的所有列都有自定义列 "is_table_2_present" 哪个值将是 1 或 0 取决于 if(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);
}

从概念上讲,每个 table 都与一个模型相关联。尝试 eloquent 您要查询的两个 table 模型之间的关系。

你可以使用selectRaw(),我想会是:

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

在上面的代码中,我使用绑定来避免 SQL 注入。

由于这个问题有点死了,有一段时间没有回应我暂时用 select Raw() 解决了它。但仍在寻找更简洁的解决方案。

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