在pivot关系模型上使用whereRaw

时间:2018-06-12 16:21:00

标签: php laravel laravel-5 eloquent query-builder

我需要能够在数据透视表关系上使用whereRaw来获取今天的所有数据。

例如,这是我的模型

public function comments(){
        return $this->belongsToMany('App\Models\Comments', 'user_comments', 'user_id', 'comment_id');
}

哪个效果很好,它可以获取我需要的所有数据。

但是,我如何在这个模型上使用whereRaw语句?因此,如果我需要遍历今天创建的每个评论,但评论日期字段以Y-m-d H:i:s格式存储,所以我需要缩短时间,我该怎么做?试着做这样的事情

foreach($user->comments->whereRaw('DATE(comment_date) = DATE(NOW())') as $comment){
   echo $comment->content;
}

但它只会返回

  

[BadMethodCallException]
    方法whereRaw不存在。

是否无法像这样使用whereRaw构建器?

另外,我如何通过人际关系来做到这一点?

例如,如果我的评论与名为comment_location的表有关系,我想在评论位置关系上做whereRaw,就像这样

foreach($user->comments as $comment){
  foreach($comment->commentLocation->whereRaw() as $location){
    echo $location->name;
  }
}

1 个答案:

答案 0 :(得分:2)

您正在使用$user->comments Illuminate\Database\Eloquent\Collection的实例,但您应该使用$user->comments() Illuminate\Database\Eloquent\Relations\BelongsToMany的实例,并且您可以添加查询构建器功能

固定代码:

foreach($user->comments()->whereRaw('DATE(comment_date) = DATE(NOW())')->get() as $comment) {
   echo $comment->content;
}