Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel中构建基于条件的查询?_Php_Laravel - Fatal编程技术网

Php 如何在Laravel中构建基于条件的查询?

Php 如何在Laravel中构建基于条件的查询?,php,laravel,Php,Laravel,我可以在Code Igniter中这样做: $this->db->select(); $this->from->('node'); if ($published == true) { $this->db->where('published', 'true'); } if (isset($year)) { $this->db->where('year >', $year); } $this->db->get();

我可以在Code Igniter中这样做:

$this->db->select();
$this->from->('node');
if ($published == true)
{
    $this->db->where('published', 'true');
}
if (isset($year))
{
    $this->db->where('year >', $year);
}
$this->db->get();

如何翻译此代码以使其在Laravel中工作?

以下是如何完成查询:

$year = 2012;
$published = true;

DB::table('node')
->where(function($query) use ($published, $year)
{
    if ($published) {
        $query->where('published', 'true');
    }

    if (!empty($year) && is_numeric($year)) {
        $query->where('year', '>', $year);
    }
})
->get( array('column1','column2') );
为了找到更多的信息,我建议阅读《拉雷维尔文档》中的流畅和雄辩。

使用流利的语言,您可以:

$query = DB::table('node');

if ($published == true)
    $query->where('published', '=', 1);

if (isset($year))
    $query->where('year', '>', $year);

$result = $query->get();

如果您需要使用Elount,您可以这样使用它,我不确定Where NotNull是否是最佳用途,但我找不到其他方法来返回我们真正想要的空查询实例:

$query = Model::whereNotNull('someColumn');
if(x < y)   
    {
        $query->where('column1', 'LIKE', '%'. $a .'%');
    }else{
        $query->where('column2', 'LIKE', '%'. $b .'%');
    }
$results = $query->get();
这里有很多关于这类东西的信息

从开始,您可以通过如下方式编写条件来避免断链:

$query = DB::table('node')
    ->when($published, function ($q) use ($published) {
        return $q->where('published', 1);
    })
    ->when($year, function($q) use ($year) {
        return $q->where('year', '>', $year);
    })
    ->get();
要使用雄辩,只需将
$query=DB::table('node')
node::
交换,但要意识到,如果这两个条件都失败,您将返回表中的所有内容,除非您在查询DB/模型之前或从查询本身中检查其他条件

请注意,
$published
$year
必须在本地范围内,以供关闭使用


通过创建宏,可以使其更加简洁易读。请参阅:

了解我使用的以下雄辩查询,该查询仅在where条件有值时执行

->where(function($query) use ($value_id)
                    {

                            if ( ! is_null($value_id)) 
                                $query->where('vehicle_details.transport_type_id', $value_id);

                    })

您可以在条件中使用
Model::when()
,也可以创建
Builder::micro()

比如说

$results = Model::where('user_id', Auth::id())
    ->when($request->customer_id, function($query) use ($request){
        return $query->where('customer_id', $request->customer_id);
    })
    ->get();
如果您需要为某个条件创建micro,那么。按照下面的说明操作

在服务器ICE提供程序中编写thic代码

Builder::macro('if', function ($condition, $column, $operator, $value) {
    if ($condition) {
        return $this->where($column, $operator, $value);
    }

    return $this;
});
使用如下示例

$results = Model::where('user_id', Auth::id())
    ->if($request->customer_id, 'customer_id', '=', $request->customer_id)
    ->get();

参考:

我没有在这里看到它。您甚至可以像这样开始查询

$modelQuery=Model::query()

然后链接其他查询命令。也许这对新人会有帮助。

我们可以这样写(更准确的方式):


在Laravel文档中未提及。这是拉力

在Laravel>5.2中,您可以使用
when()

文件:


博客帖子:

这只返回一个数组。有什么方法可以返回集合吗?这也适用于分页日期,只需将get替换为paginate或simplePaginate我们可以这样写(更精确的方式):$query=DB::table('node')->when($published,function($q,$published){return$q->where('published',1);}->when($year,function($q,$year){return$q->where('year','>',$year);})->get()whereRaw(1)可能是whereNotNull(fieldname)的更好的替代品,我在2020年12月使用了它,它完全满足了我的需要。谢谢!我真的看不出
时的优点。对我来说,一个简单的if语句看起来更干净、更容易阅读,可能执行得更快。
$results = Model::where('user_id', Auth::id())
    ->if($request->customer_id, 'customer_id', '=', $request->customer_id)
    ->get();
$query = DB::table('node')->when($published, function ($q, $published) {
        return $q->where('published', 1);
    })->when($year, function($q, $year) {
        return $q->where('year', '>', $year);
    })->get()
$results = DB::table('orders')
    ->where('branch_id', Auth::user()->branch_id)
    ->when($request->customer_id, function($query) use ($request){
        return $query->where('customer_id', $request->customer_id);
    })
    ->get();