【问题标题】:Laravel Eloquent return distinct values from related modelLaravel Eloquent 从相关模型返回不同的值
【发布时间】:2023-04-06 22:54:01
【问题描述】:

我想从模型关系中返回不同的值:

我目前有三种型号:

发帖

评论

评分

我想显示

此评论有以下评级金,铜,铂

每条评论可以有很多评分,因此每个帖子可能有 10 个金奖,我尽量避免看到金奖 10 次

目前为止

@foreach ($post->comments as $comment)
  @foreach ($comment->rating as $rating)
      <dd class="text-gray-900">{{ $rating->name }}</dd>
  @endforeach
 @endforeach

然而这会返回

黄金黄金青铜铂金

我想要的是每个评分只看到一次

金铜铂金

我尝试过不添加 foreach 而是回显

{{ $post->comments->rating->distinct() }}

但这会返回以下错误

Property [ratings] does not exist

所以如果我只是回应

{{ $post->comments }}

我可以看到 rating_id,所以我知道我需要的东西是可用的,我只是不知道如何访问它

[{"id":1,"created_at":null,"updated_at":null,"comment":"test post","pivot":{"post_id":11,"comment_id":1},"ratings":[{"id":1,"created_at":null,"updated_at":null,"name":"rating gold","pivot":{"comment_id":1,"rating_id":1}},{"id":2,"created_at":null,"updated_at":null,"name":"rating silver","pivot":{"comment_id":1,"rating_id":2}}]},

我不太清楚如何在 foreach 循环之外访问这些数据

【问题讨论】:

  • 你能分享一下这些模型的表结构吗?

标签: laravel eloquent


【解决方案1】:

$comment-&gt;rating会给出一个集合,我不知道laravel集合上有什么distinct方法。

您可以使用返回查询生成器的$comment-&gt;rating(),这样您就可以使用它找到查询。

例如$comment-&gt;rating()-&gt;select('name')-&gt;groupBy('name')-&gt;get(),它将返回基于名称的唯一评级列表:

  @foreach ($comment->rating()->select('name')->groupBy('name')->get() as $rating)
      <dd class="text-gray-900">{{ $rating->name }}</dd>
  @endforeach

你也可以使用 laravel 集合中的unique() 方法试试:

$comment->rating->unique('name')

【讨论】:

  • 您对使用查询构建器的建议几乎达到了我的要求,因为它将为每条评论返回一个唯一的评级,理想情况下,我想要的是所有 cmets 的唯一值,而不是每条评论
  • 我认为你需要给出一个你想要的示例输出。根据我对你问题的理解,我的回答可以做到。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 2017-02-04
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2021-07-11
相关资源
最近更新 更多