Мне нужно использовать 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
S_R 12 Июн 2018 в 19:20

1 ответ

Лучший ответ

Вы используете $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;
}
2
Davit 12 Июн 2018 в 16:53