【问题标题】:How to get distinct record through many to many relation如何通过多对多关系获得不同的记录
【发布时间】:2019-11-19 22:15:38
【问题描述】:

我有以下数据透视表。

+----+------------+-----------+ |编号 |表A_id | tableB_id | +----+------------+-----------+ | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 1 | 3 | | 4 | 2 | 1 | | 5 | 2 | 4 | +----+------------+-----------+

控制器:

$tableAs = \App\TableA::all();

模型中已经定义了多对多关系,下面是视图代码。

@foreach ($tableAs as $tableA)
@foreach ($tableA->$tableBs as $tableB)
<p>{{ $tableA->id . ' - ' . $tableB->id }}</p>
@endforeach
@endforeach

现在,我想为表 B 获取不同的行。
如上表,当前输出为:

1 - 1
1 - 2
1 - 3
2 - 1 // <- not expect
2 - 4

在视图文件中不写逻辑的情况下实现我的希望的最佳实践是什么?

【问题讨论】:

  • 是否因为1-2 已经存在而无法预期2-1?您可以事先确保那些“意外”关系不会保存在数据库中
  • 最好的方法就像@kerbholz 说的那样,您不需要在数据透视表中保存相同的记录。除非您有另一个列,并且该列是不同的消息。但是,如果该列存在,则需要将其放入 tableA 或 tableB 中。
  • 我是@kerbholz 的第三个建议,但如果必须,请查看这篇文章以获取想法:stackoverflow.com/questions/55633472/…
  • 是的。但在其他情况下,需要同时获取1-22-1,因此两条记录都需要保存。顺便说一句,数据透视表中还有其他列。 @kerbholz

标签: php laravel laravel-5


【解决方案1】:

你能试试这个代码吗

$tableAs = \App\TableA::distinct('tableB_id')->all();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多