Отношение запроса внутри отношения в Laravel Eloquent - PullRequest
4 голосов
/ 13 июля 2020

Я пытаюсь узнать новости писателя в соответствии с прошедшей датой. Я написал функцию до сих пор:

public static function getNewsByAuthorByDate($id, $year, $limit = 1){
    return User::where('id', $id)->has('news')
      ->with(['news' => function($q) use(&$limit, &$year) {
         $q->where('created_at', 'like', '%' . $year . '%')->latest()->limit($limit);
      }])
      ->first();
}

Но news[] имеет значение null. Можно ли получать новости писателя в соответствии с датой или мне нужно попробовать другой способ?

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

вы можете использовать whereYear

public static function getNewsByAuthorByDate($id, $year, $limit = 1){
    return User::where('id', $id)->has('news')
      ->with(['news' => function($q) use(&$limit, &$year) {
         $q->whereYear('created_at',$year)->latest()->limit($limit);
      }])
      ->first();
}

, а для использования лимита с активной загрузкой вы должны использовать пакет eloquent-eager-limit

0 голосов
/ 13 июля 2020

Согласно документации :

Методы построителя запросов limit и take нельзя использовать при ограничении активной загрузки.

Кроме того, вам не нужно использовать метод has, news будет пустым, если у пользователя нет новостей:

return User::with(['news' => function($q) use($year) {
         $q->whereYear('created_at', $year)->latest();
      }])
      ->find($id);
...