gpt4 book ai didi

laravel - Laravel中的高级whereNotNull语句

转载 作者:行者123 更新时间:2023-12-04 17:34:26 25 4
gpt4 key购买 nike

在Laravel 4中可以执行以下操作吗? ...

DB::table('myTable')
->select(DB::raw($columnNames))
->whereNotNull(function($query) use($columns) {
foreach ($columns as $column) {
$query->whereNotNull($column);
}
})
->get();

如果我有下表:
table: myTable
id | name | age | weight
======================================
1 Jane NULL 150
2 NULL 12 80
3 Bob NULL NULL
4 John 22 120
5 Cody NULL NULL

如果 $columns[age, weight]$columnNames'age, weight',则应用上面的whereNotNull语句,我期望输出如下:
age     |    weight
===================
NULL 150
12 80
22 120

我怎样才能做到这一点?

更新:

条件是返回所有的行,其中选定的列不全为空。因此,必须将 whereNotNull子句应用于每行中的每个(选定)列。如果所有列均为NULL,则whereNotNull将返回false,并且该行不应成为结果的一部分。因此,仅应返回具有至少一个非空值的行。

最佳答案

如果这些是唯一的位置,那么您甚至不需要嵌套的位置。重要提示:orWhereNotNull而不是whereNotNull,因此只有一列不是NULL

$query = DB::table('myTable')->select(DB::raw($columnNames));

foreach($columns as $column){
$query->orWhereNotNull($column);
}

$result = $query->get();

另外(至少在您的示例中)您不需要单独的变量 $columnNames,因为 select将接受列名数组。
$query = DB::table('myTable')->select($columns);

如果您碰巧需要更多的where条件(尤其是带有 AND的条件),则需要一个嵌套的where:
$query = DB::table('myTable')->select(DB::raw($columnNames));

$query->where(function($q) use ($columns){
foreach($columns as $column){
$q->orWhereNotNull($column);
}
});

$result = $query->get();

嵌套的where将在where子句周围放置 ( )。那意味着代替:
WHERE age IS NOT NULL OR weight IS NOT NULL AND foo = 'bar'

你得到:
WHERE (age IS NOT NULL OR weight IS NOT NULL) AND foo = 'bar'

关于laravel - Laravel中的高级whereNotNull语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com