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
");
我使用 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
");