【问题标题】:Querying to fetch relationship data in laravel在 laravel 中查询获取关系数据
【发布时间】:2020-03-13 13:19:28
【问题描述】:

我正在获取带有特定标签 ID 的帖子,到目前为止我有以下代码。

public static function getPostByTag($id) {
    return Tag::with('posts')->whereHas('posts', function($q) use(&$id) {
      $q->where('tags.id',$id);
    })->get();
}

到目前为止,我获得的数据运行良好,但现在,我想限制数据。我应该怎么做才能限制数据?

我尝试了以下方法:

public static function getPostByTag($id) {
    return Tag::with('posts')->whereHas('posts', function($q) use(&$id) {
      $q->where('tags.id',$id);
    })->take(5)->get();
}

但是,它似乎不起作用。另外,我想按最新日期列出我的帖子。

【问题讨论】:

  • @Rwd 有什么例子吗?因为我不知道。
  • 你想限制标签或帖子的数据?
  • @TsaiKoga 我想限制查询中的帖子。

标签: laravel many-to-many eloquent-relationship


【解决方案1】:

看来你想通过tag_id发帖,你可以用Tag::where('id', $id)

如果你想要最新的帖子,你可以使用->latest()方法,它会自动按created_at desc排序。

而你要限制发帖,需要限制在with闭包中:

public static function getPostByTag($id){
    return Tag::where('id', $id)->has('posts')
              ->with(['posts' => function($q) {
                 $q->latest()->limit(5);
              }])->get();
}

【讨论】:

  • 上面写着,mb_strpos() expects parameter 1 to be string, object given
  • 它仍然在标签中给出所有帖子。
  • @Eliesha 我想你想要带有id 的标签,你可以找到带有帖子的标签。
  • 我想要有标签 id 的帖子,假设是 21。
  • @Eliesha 你可以试试我的帖子,假设id=21,它会发现标签id是21,并得到标签最近5个帖子
【解决方案2】:

您需要通过以下方式进行:

public static function getPostByTag($id){
    return Tag::whereHas('posts', function($q) use(&$id){
        $q->where('tags.id',$id);
    }->with(['posts' => function($q) {
        $q->orderBy('created_at', 'DESC')->take(5);
    }])->get();
}

【讨论】:

  • 它说,标签模型不存在。
  • @Eliesha 你应该在控制器类的顶部添加use App\Tag;
  • 没有。我在 Models 文件夹中有 Tag 模型。
  • @Eliesha 所以添加use App\Models\Tag;
  • 不,还没有修复。我正在标签模型本身上创建 getPostByTag 。我必须在其模型本身中添加App\Models\Tag 吗?
猜你喜欢
  • 1970-01-01
  • 2014-11-13
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2020-07-01
  • 2018-02-14
相关资源
最近更新 更多