Использование whereRaw для модели отношений Pivot - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно иметь возможность использовать 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 не существует.

Isневозможно использовать построитель whereRaw следующим образом?

Кроме того, как мне сделать это через отношения отношений?

Например, если мои комментарии имели отношение к таблице с именем comment_locationи я хотел сделать whereRaw для комментария Расположение отношений, как это

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

1 Ответ

0 голосов
/ 12 июня 2018

Вы используете $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;
}
...