Использование whereRaw на модели отношений pivot

Мне нужно иметь возможность использовать 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]
Method whereRaw does not exist.

Разве нельзя вот так использовать компоновщик whereRaw?

Также как мне сделать это через отношения взаимоотношений?

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

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

Попробуйте $user->comments()->whereRaw.... Обратите внимание на () после комментариев

ljubadr 12.06.2018 18:23
$ comment-> commentLocation изменить на $ комментарий-> comment_location ()
Davit 12.06.2018 18:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
408
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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;
}

Не могли бы вы подробнее рассказать о почему как, это решает проблему?

Derek Pollard 12.06.2018 18:24

Ах да ладно! Как бы я сделал это, если бы у меня был доступ к отношениям отношений? См. Отредактированный вопрос

S_R 12.06.2018 18:30

См. На этот вопрос принят ответ https://stackoverflow.com/questions/3760956/how-do-i-write-a‌ -sql-query-for-a-specific-date-range-and‌ -date-time-using-sql‌ -сер. Это должно быть полезно для вас

Davit 12.06.2018 18:37

также добавьте -> получить () после -> гдеRow ()

Davit 12.06.2018 18:38

Другие вопросы по теме