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

2022-08-30 15:23:45

我可以在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中工作?


答案 1

在Fluent中,您可以执行以下操作:

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

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

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

$result = $query->get();

答案 2

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

$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();

要使用 Eloquent,只需交换,但要意识到如果两个条件都失败,您将获得表中的所有内容,除非您在查询 db/model 之前或从查询本身中检查其他条件。$query = DB::table('node')Node::

请注意,并且必须在本地范围内才能由闭包使用。$published$year

您可以通过创建宏使其更加简洁和可读。请参见: 有条件地向 Laravel 的查询生成器添加说明


推荐