gpt4 book ai didi

php - Yii2 ActiveQuery join keep 返回不同的值

转载 作者:可可西里 更新时间:2023-11-01 07:38:55 25 4
gpt4 key购买 nike

我有如下两张表

暂停表:

CREATE TABLE `halte` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nama` varchar(255) NOT NULL,
`lat` float(10,6) DEFAULT NULL,
`lng` float(10,6) DEFAULT NULL,
PRIMARY KEY (`id`)
)

table 停止:

CREATE TABLE `stops` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_halte` int(11) DEFAULT NULL,
`sequence` int(2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_halte` (`id_halte`)
)

我还有其他一些不会造成任何问题的表。

停止表有多对一的关系来停止。问题是当我尝试使用右连接到表停止点从 halte 表获取行时,Yii 只返回唯一行。 Yii 不会再返回相同的 halte 行,即使 stop table 有多个记录与 halte 表中的同一行相关。

这是我的代码

$haltes = $modelHalte->find()
->rightJoin('stops', 'halte.id = stops.id_halte')
->where(['stops.id_rute'=>Yii::$app->request->get('rute')])
->orderBy('sequence')
->all();

我试过 distinct(false) 但没有结果。我还检查了调试器,它运行了我想要的正确查询:

SELECT `halte`.* FROM `halte` RIGHT JOIN `stops` ON halte.id = stops.id_halte WHERE `stops`.`id_rute`='1' ORDER BY `sequence`

我尝试手动运行该查询,它返回了 29 行,这正是我想要的。但在 Yii 中,它只返回 27 行,因为 2 行是 halte 表中的相同记录。

我知道我可以使用 yii\db\Query 实现这一点,但我想使用 ActiveRecord。

有什么办法可以解决这个问题吗?
非常感谢您的意见/帮助。
谢谢。

最佳答案

检查你主动查询生成的sql命令

$haltes = $modelHalte->find()
->rightJoin('stops', 'halte.id = stops.id_halte')
->where(['stops.id_rute'=>Yii::$app->request->get('rute')])
->orderBy('sequence')
->all();

echo $haltes->createCommand()->sql;

或者获取包含所有参数的 SQL 尝试:

 $haltes->createCommand()->getRawSql();

并将 ActiveQuery 生成的代码与您手动创建的代码进行比较..

关于php - Yii2 ActiveQuery join keep 返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36100800/

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