Laravel eloquent orm 查询使用 orwhere 子句

Laravel eloquent orm query using orwhere clause

您好,我一直在使用这个查询来检索基于 orWhere 子句的数据

$q->where('created', $date);
$q->where(function ($query) {
  $query->where('gender', 'Male')
        ->where('age', '>=', 18);
})->orWhere(function($query) {
  $query->where('gender', 'Female')
        ->where('age', '>=', 30);   
})->orWhere(function($query) {
  $query->where('gender', 'Orthodox')
        ->where('age', '>=', 35);

first orWhere 子句运行良好,但 2nd 不是。这似乎是一个范围问题,即 ()

将你的条件适当分组,应该没问题。

$q->where('created', $date);
$q->where(function ($query) {
    $query->where(function ($query) {
        $query->where('gender', 'Male')
            ->where('age', '>=', 18);
    })->orWhere(function ($query) {
        $query->where('gender', 'Female')
            ->where('age', '>=', 30);
    })->orWhere(function ($query) {
        $query->where('gender', 'Orthodox')
            ->where('age', '>=', 35);
    });
});

使用额外的 where() 闭包:

$q->where('created', $date);
$q->where(function ($q) {
     $q->orWhere(function($query) {
        $query->where('gender', 'Male')
            ->where('age', '>=', 18);
     })->orWhere(function($query) {
        $query->where('gender', 'Female')
            ->where('age', '>=', 30);   
     })->orWhere(function($query) {
        $query->where('gender', 'Orthodox')
            ->where('age', '>=', 35);
     });
});