2

我正在尝试根据过去的日期获取作家的消息。到目前为止,我已经编写了函数:

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[]是空的。是否可以根据日期获取作家新闻,还是我必须尝试其他方式?

4

2 回答 2

2

你可以使用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

于 2020-07-13T09:08:19.677 回答
0

根据文档

约束急切加载时,可能不使用和查询构建器方法limittake

另外,您不需要使用has方法,news如果用户没有消息,则为空:

return User::with(['news' => function($q) use($year) {
         $q->whereYear('created_at', $year)->latest();
      }])
      ->find($id);
于 2020-07-13T09:39:32.503 回答