口才好多

时间:2018-07-11 12:41:54

标签: laravel

我想获取会议表中状态列等于“ P”并且具有end_date

 $publishedConferences = 
 $user->conferences()->
 where(['status', '=', 'P'], 
 ['end_date','<', now()])->paginate($pageLimit);

但是像这样不起作用,它出现了:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0'
in 'where clause' (SQL: select count(*) as aggregate 
from `conferences` where `conferences`.`organizer_id` = 4 
and `conferences`.`organizer_id` is not null
and (`0` = status and `1` = = and `2` = P))

5 个答案:

答案 0 :(得分:1)

引用:https://laravel.com/docs/5.6/queries#where-clauses

只需添加多个where()

,即可轻松组合多个where子句
        $users = DB::table('users')
                ->where('votes', '>', 100)
                ->where('name', 'John')
                ->get();

如果您需要OR运算符

         $users = DB::table('users')
                ->where('votes', '>', 100)
                ->orWhere('name', 'John')
                ->get();

您也可以使用whereColumn来执行此操作,只需注意他们正在使用and运算符:

      $users = DB::table('users')
         ->whereColumn([
                 ['first_name', '=', 'last_name'],
                 ['updated_at', '>', 'created_at']
         ])->get();

答案 1 :(得分:0)

尝试关闭:

$publishedConferences = 
   $user->conferences()->
   where(function ($query) {
     $query->where('status', '=', 'P');
     $query->where('end_date','<', now());
   })
   ->paginate($pageLimit);

答案 2 :(得分:0)

您已经很接近了,但是您对where()的参数却有些偏离。

传递where子句数组时,它必须是数组数组。您只需要将参数包装在另一个数组中即可:

$publishedConferences = $user->conferences()
    ->where([
        ['status', '=', 'P'],
        ['end_date','<', now()]
    ])
    ->paginate($pageLimit);

这实际上与使用闭包并向查询中单独添加where子句相同。

答案 3 :(得分:0)

我认为这比较干净。

{{1}}

答案 4 :(得分:-1)

您可以执行以下操作:

  $publishedConferences = $user->conferences()->where('status', 'P')->where('end_date','<',Carbon::now())->paginate($pageLimit);