Php Laravel连接和分离

Php Laravel连接和分离,php,laravel,eloquent,Php,Laravel,Eloquent,在Laravel中,我有一个问题: $productsModel->join('tags', 'tags.item_id', '=', 'products.id') ->select('products.*', 'tags.item_id') ->distinct(); DB tables looks like this: | products | tags | ----------|---------| | id | id

在Laravel中,我有一个问题:

$productsModel->join('tags', 'tags.item_id', '=', 'products.id')
      ->select('products.*', 'tags.item_id')
      ->distinct();

DB tables looks like this:
| products | tags    |
 ----------|---------|
| id       | id      |
|          | item_id |

产品与标记之间存在一对多关系,这会在连接表时产生问题。例如,我需要根据多个标记查询产品,但我只需要显示一个产品。

好的。你需要提供更多的上下文

从外观上看,你有一个1:n的关系,其中TableA有很多TableB。因此,如果执行联接,可能会将多个TableB记录联接到TableA记录,这很好

但是,如果您想要选择一个不同的TableA记录,那么如果存在多个TableB记录,那么应该返回多个可能的TableB记录中的哪一个

实现您的要求的一个简单方法是分组使用

还值得一提的是,选择table_b.item_id不是必需的,因为该值将始终等于table_a.id。只是说说而已

编辑-根据更新后的问题,如果您只想查找带有特定标签的产品,可以使用WHERE IN,而不是从表_b中选择字段


仅选择要按其分组的列。

您的查询和数据库架构不匹配。项目id在表a或表b上?$model是表a或表b中记录的实例吗??你想把什么区别开来?A还是B?谢谢。拼写错误-已更新。查询一个产品的条件是什么?问题是,当您使用->选择“table_a.*”时,“table_b.item_id”ir返回错误。SQLSTATE[42000]:语法错误或访问冲突:SELECT列表的1055表达式26不在GROUP BY子句中,并且包含功能上不依赖GROUP BY子句中的列的未聚合列“table_b.item_id”;我的错。这又回到了我的问题,关于如何决定使用哪个TableB记录。我刚刚在上面抛出了一个聚合器函数来让MySQL开心,但你需要回答这个问题。第一个可用的聚合器或groupBy实际上对我有用。但你是对的,我的问题不是特别针对laravel,而是如何聚合。请更新你的问题,具体说明你正在尝试做什么。你为什么要加入我们的行列?你想从表B中得到什么?
$tableA->selectRaw('table_a.*, MAX(table_b.item_id) AS item_id')
    ->join('table_b', 'table_a.id', '=', 'table_b.item_id')
    ->groupBy('table_a.id')
    ->get();
$tableA->select('table_a.*')
    ->join('table_b', 'table_a.id', '=', 'table_b.item_id')
    ->whereIn('table_b.id', [1, 2, 3])
    ->groupBy('table_a.id')
    ->get();
$tableA->select('table_a.id')
->join('table_b', 'table_a.id', '=', 'table_b.item_id')
->whereIn('table_b.id', [1, 2, 3])
->groupBy('table_a.id')
->get();