gpt4 book ai didi

php - Yii2 GridView 中的重复记录

转载 作者:行者123 更新时间:2023-11-29 09:26:00 26 4
gpt4 key购买 nike

它工作得很好,但我必须在现有的 order1 表中重新导入数据,该表与 order.id = order_item 上的 order_item 表相关.order_idorder_item.location_id = location.id

因此,为了获取 order1 表在 GridView 中的位置,我定义了如下关系:

public function getLocation() {         
return $this->hasOne(Location::className(), ['id' => 'location_id'])->viaTable('{{%order_item}}', ['order_id' => 'id']);
}

现在我在 GridView 中有多条记录。为 GridView 形成的查询如下:

SELECT `order1`.* 
FROM `order1`
LEFT JOIN `order_item` ON `order1`.`id` = `order_item`.`order_id`
LEFT JOIN `location` ON `order_item`.`location_id` = `location`.`id`
where 1 ORDER BY `id` DESC
LIMIT 20;

如何将其修复为内部联接或其他方式,以便它仅从 order1 表返回一次记录?

在 GridView 中,我使用 location.location_title

注意:每个订单有多个订单商品。

也尝试过:

public function getOrderItem()
{
return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
}

public function getLocation()
{
return $this->hasOne(Location::className(), ['id' => 'location_id'])
->via('orderItem');
}

最佳答案

您需要在搜索模型中添加GROUP BY,以确保查询结果中的订单不会重复:

$query->groupBy('order1.id');

虽然 hasOne() 似乎不正确(如果一个订单可以有多个商品,那么它也可以有多个位置),但将其更改为 hasMany() 将不修复 GridView 结果。您需要小心一对多或多对多关系,通常您需要使用GROUP BY来删除重复项或调整数据库结构或搜索模型中的连接,以避免这种情况情况。

<小时/>

顺便说一句:在关系定义 (getLocation()) 中添加 groupBy() 几乎总是不正确的。这不是处理主模型结果分组的关系定义工作(您几乎可以肯定它会产生延迟加载问题)。

关于php - Yii2 GridView 中的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59604790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com