Php Laravel雄辩:在关系之间建立独特的模型
我有这样一个场景:Php Laravel雄辩:在关系之间建立独特的模型,php,jquery,mysql,laravel,eloquent,Php,Jquery,Mysql,Laravel,Eloquent,我有这样一个场景: $users = DB::table('hashtags AS tags') ->select('tags.*') ->join('[posts AS post','post.id','=','tags.id') ->distinct() ->paginate(5, ['tags.*']); 我有User模型,它与Post模型有OneToMany关系。 我有一个Hashtag模型,它与Post模型有OneToMany
$users = DB::table('hashtags AS tags')
->select('tags.*')
->join('[posts AS post','post.id','=','tags.id')
->distinct()
->paginate(5, ['tags.*']);
我有User
模型,它与Post
模型有OneToMany关系。
我有一个Hashtag
模型,它与Post
模型有OneToMany关系
概述:ONE用户拥有多篇帖子,ONE帖子属于ONE标签,ONE标签拥有多篇帖子
我只想获取标签的唯一用户记录
我能够以不可伸缩的方式(首先获取所有帖子,然后按用户id迭代过滤),但我需要保持大记录数的可伸缩性
编辑:我在Laravel文档中看到了部分解决方案。
Laravel eloquent有一个方法叫做
使用该方法,我可以指定在查询中应该是唯一的参数
在我的例子中,我用以下方法解决了这个问题:
$users=$hashtag->posts->unique('user_id')代码>
但我不能用这种方式分页查询
有人能解决这个问题吗?试着使用DISTINCT
$users=$hashtag->posts()->selectRaw('DISTINCT(user\u id)AS unique\u user\u id')->分页(10);
或
使用groupBy()
$users=$hashtag->posts()->groupBy('name')->select('user_id')->paginate(10);
您必须对主模型调用者进行分页
我不知道这是否能再现您的实际场景,但让我们看看这个例子:
假设您有模型标签
假设代码可以是这样的:
$users = DB::table('hashtags AS tags')
->select('tags.*')
->join('[posts AS post','post.id','=','tags.id')
->distinct()
->paginate(5, ['tags.*']);
我不知道您的查询是否会非常准确,但对于这一点,我相信最好的方法是您执行原始查询,这可能会给您的数据库和操作带来成本,但您可以围绕这种方法对数据库进行索引和分区
有时,即使在构建连接查询时,也要始终记住雄辩的语句,这可能会给数据库带来更大的代价
因为您担心可伸缩性,所以最好也写一个视图,通过适当的索引和分区获取所有数据