[php] 如何使用Laravel Eloquent创建多个where子句查询?


Answers

查询范围可以帮助您让代码更具可读性。

http://laravel.com/docs/eloquent#query-scopes

用一些例子更新这个答案:

在你的模型中,像这样创建范围方法:

public function scopeActive($query)
{
    return $query->where('active', '=', 1);
}

public function scopeThat($query)
{
    return $query->where('that', '=', 1);
}

然后,您可以在构建查询时调用此范围:

$users = User::active()->that()->get();
Question

我正在使用Laravel Eloquent查询构建器,我有一个查询,我想在多个条件下使用WHERE子句。 它的工作原理,但它不是优雅的。

例:

$results = User::
      where('this', '=', 1)
    ->where('that', '=', 1)
    ->where('this_too', '=', 1)
    ->where('that_too', '=', 1)
    ->where('this_as_well', '=', 1)
    ->where('that_as_well', '=', 1)
    ->where('this_one_too', '=', 1)
    ->where('that_one_too', '=', 1)
    ->where('this_one_as_well', '=', 1)
    ->where('that_one_as_well', '=', 1)
    ->get();

有没有更好的方法来做到这一点,或者我应该坚持这种方法?







public function search()
{
    if (isset($_GET) && !empty($_GET))
    {
        $prepareQuery = '';
        foreach ($_GET as $key => $data)
        {
            if ($data)
            {
                $prepareQuery.=$key . ' = "' . $data . '" OR ';
            }
        }
        $query = substr($prepareQuery, 0, -3);
        if ($query)
            $model = Businesses::whereRaw($query)->get();
        else
            $model = Businesses::get();

        return view('pages.search', compact('model', 'model'));
    }
}



在这种情况下,你可以使用这样的东西:

            User::where('this', '=', 1)
                ->whereNotNull('created_at')
                ->whereNotNull('updated_at')
                ->where(function($query){
                    return $query
                              ->whereNull('alias')
                              ->orWhere('alias', '=', 'admin');
                });

它应该为您提供一个查询,如:

select * from `user` 
where `user`.`this` = 1 
AND `user`.`created_at` is not null 
AND `user`.`updated_at` is not null 
AND (`alias` is null OR `alias` = 'admin')



你可以在Laravel 5.3中使用雄辩

所有结果

UserModel::where('id_user', $id_user)
                ->where('estado', 1)
                ->get();

部分结果

UserModel::where('id_user', $id_user)
                    ->where('estado', 1)
                    ->pluck('id_rol');



使用where条件并传递数组$ array = [1008,1009,1010]; User :: whereIn('users.id',$ array) - > get();




子句的倍数

    $query=DB::table('users')
        ->whereRaw("users.id BETWEEN 1003 AND 1004")
        ->whereNotIn('users.id', [1005,1006,1007])
        ->whereIn('users.id',  [1008,1009,1010]);
    $query->where(function($query2) use ($value)
    {
        $query2->where('user_type', 2)
            ->orWhere('value', $value);
    });

   if ($user == 'admin'){
        $query->where('users.user_name', $user);
    }

最后得到结果

    $result = $query->get();





Related