主页/PHP笔记/PHP问答/框架Laravel/在Laravel查询构建器中使用多个‘WHERE’条件

在Laravel查询构建器中使用多个‘WHERE’条件

Bug编译狮

Bug编译狮

在 Laravel 中,你可以使用 where 方法来构建复杂的查询,并且可以多次调用这个方法以添加更多的 WHERE 条件。以下是一个示例,展示了如何在查询构建器中使用多个 WHERE 条件:

use IlluminateHttpRequest;
use AppModelsUser;

public function index(Request $request)
{
    // 创建一个新的查询构建器实例
    $users = User::query();

    // 添加第一个 WHERE 条件:年龄大于 25
    if ($request->input('age') > 25) {
        $users->where('age', '>', $request->input('age'));
    }

    // 添加第二个 WHERE 条件:姓名包含 'John'
    if ($request->input('name')) {
        $users->where('name', 'like', '%' . $request->input('name') . '%');
    }

    // 执行查询并获取结果
    $users = $users->get();

    return view('users.index', compact('users'));
}

在这个示例中,我们首先创建了一个新的查询构建器实例 User::query()。然后,我们使用 where 方法添加了两个 WHERE 条件:

  1. 首先,我们检查请求中是否提供了 age 参数,并且如果提供了,则添加一个 WHERE 条件来过滤出年龄大于 25 的用户。
  2. 接着,我们检查请求中是否提供了 name 参数,并且如果提供了,则添加一个 WHERE 条件来过滤出姓名包含 John 的用户。

最后,我们执行查询并获取结果,然后将结果传递到视图中显示。

示例代码

假设你有一个名为 User 的模型,并且你想通过查询来获取所有年龄大于 25 并且姓名包含 ‘John’ 的用户,你可以这样做:

// 假设你有一个名为 'Users' 的控制器
namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppModelsUser;

class UsersController extends Controller
{
    public function index(Request $request)
    {
        // 创建一个新的查询构建器实例
        $users = User::query();

        // 添加第一个 WHERE 条件:年龄大于 25
        if ($request->input('age') > 25) {
            $users->where('age', '>', $request->input('age'));
        }

        // 添加第二个 WHERE 条件:姓名包含 'John'
        if ($request->input('name')) {
            $users->where('name', 'like', '%' . $request->input('name') . '%');
        }

        // 执行查询并获取结果
        $users = $users->get();

        return view('users.index', compact('users'));
    }
}

在这个例子中,我们通过 where 方法添加了两个 WHERE 条件,分别用于过滤出年龄大于 25 和姓名包含 ‘John’ 的用户。最后,我们执行查询并获取结果,然后将结果传递到视图中显示。

黑板Bug讲师

黑板Bug讲师

介绍

Laravel,作为PHP框架,提供了优雅的语法和强大的功能来与数据库交互。Laravel的查询构建器为SQL查询提供了一个方便的包装器,使得执行复杂的数据库操作变得简单。在本教程中,我们将深入探讨使用多个查询构建器的功能。WHERE在Laravel查询构建器内部条件以高效过滤结果。无论您是从零开始还是寻求增强Laravel数据库查询技能,此指南均设计为提供从基本到高级功能的清晰示例。

基本的“WHERE”条件

Laravel的查询构建器提供了可读性的语法来添加到查询中。WHERE数据库查询条件的条件是什么?这里是一个简单的示例:

$users = DB::table('users')
    ->where('status', 'active')
    ->get();

该查询从“users”表中检索所有状态为“活跃”的用户。

在SQL中,可以使用多个WHERE条件来筛选数据。

如果你想添加多个条件,可以链式调用。where请提供需要合并的句子或段落。

$users = DB::table('users')
    ->where('status', 'active')
    ->where('type', 'admin')
    ->get();

它会返回同时是活跃用户和管理员的用户。

使用 orWhere 扩展查询结果

当你需要包括满足任一条件的行时,使用orWhere: 好的,请提供需要翻译的内容。

$users = DB::table('users')
    ->where('status', 'active')
    ->orWhere('type', 'guest')
    ->get();

这会获取活跃用户和访客。

分组 ‘WHERE’ 条件

有时,你需要对条件进行逻辑分组:

$users = DB::table('users')
    ->where('status', 'active')
    ->where(function ($query) {
        $query->where('type', 'admin')
              ->orWhere('votes', '>', 100);
    })
    ->get();

这选择了既是管理员又是拥有超过100票的活跃用户。

高级的“WHERE”方法

Laravel 也提供了一些高级方法,例如whereBetween好的,请提供需要翻译的内容。whereIn和你有什么事吗?whereNull好的,请提供需要翻译的内容。

使用“whereBetween”

$users = DB::table('users')
    ->whereBetween('votes', [1, 100])
    ->get();

该命令会返回投票数在1到100之间的用户。

使用 ‘whereIn’ 是什么意思?

$users = DB::table('users')
    ->whereIn('id', [1, 2, 3])
    ->get();

它检索具有特定ID的用户,即1、2或3。

考虑 ‘whereNull’

$users = DB::table('users')
    ->whereNull('deleted_at')
    ->get();

这将会选择那些未被标记为已删除的用户。

使用“WHERE”条件连接从句。

结合联接和WHERE条件也相当简单:

$orders = DB::table('orders')
    ->join('users', 'users.id', '=', 'orders.user_id')
    ->where('users.status', 'active')
    ->select('orders.*')
    ->get();

这将会获取所有由活跃用户下单的订单。

使用子查询中的“WHERE”条件

你可以通过在查询中使用子查询来突破界限。WHERE条件:

$users = DB::table('users')
    ->whereExists(function ($query) {
        $query->select(DB::raw(1))
              ->from('orders')
              ->whereRaw('orders.user_id = users.id');
    })
    ->get();

上述片段会获取至少有一个订单的用户。

结论

在本指南中,我们探讨了使用多个的动态。WHERELaravel的查询构建器中的条件条件在结构化的示例中显示了如何通过这些条件来精炼数据库查询以获取精确的数据。始终努力利用Laravel的eloquent方法使数据库交互更易于阅读、维护和高效。

长工码奴1523

长工码奴1523

在 Laravel 中,你可以使用 where() 方法来组合多个 WHERE 条件。这是一个基本的示例:

$users = User::all();
$users->where('name', 'like', '%John%')->orWhere('age', 25)->get();

在这个例子中,我们首先获取所有的用户。然后,我们使用 where() 方法和两个条件。第一个条件是 name 字段包含 ‘John’(不区分大小写),第二个条件是年龄为 25。

注意:% 是一个通配符,它匹配任何字符。如果你想限制搜索范围,可以使用引号包围你的字符串。

另外,get() 方法用于获取数据库中的数据,并返回一个数组。如果查询结果为空,get() 将返回空数组。

下面是一个更复杂的例子,展示如何处理更多条件和逻辑:

$users = User::all();

// 检查用户名是否以 "John" 开头
$users->where(function ($query) {
    $query->where('name', 'like', '%John%');
});

// 检查用户名是否包含 "Smith"
$users->where(function ($query) use ('Smith') {
    $query->where('name', 'like', "%$Smith%");
});

// 检查年龄是否在 18 到 30 岁之间
$users->where(function ($query) {
    $query->whereBetween('age', [18, 30]);
});

// 如果没有满足上述条件,则显示错误信息
$users->orWhere(function ($query) {
    $query->where('email', 'like', '%@example.com');
});

这个例子展示了如何根据不同的条件对用户进行筛选。