Yii2 ActiveQuery join keep 返回不同的值

Ald*_*ing 5 php mysql database query-builder yii2

我有两个表如下

表暂停:

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`)
)
Run Code Online (Sandbox Code Playgroud)

表站:

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`)
)
Run Code Online (Sandbox Code Playgroud)

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

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

这是我的代码

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

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

SELECT `halte`.* FROM `halte` RIGHT JOIN `stops` ON halte.id = stops.id_halte WHERE `stops`.`id_rute`='1' ORDER BY `sequence`
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以使用 ActiveRecord 来实现此目的yii\db\Query,但我想使用 ActiveRecord。

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

sca*_*dge 1

检查活动查询生成的 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;
Run Code Online (Sandbox Code Playgroud)

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

 $haltes->createCommand()->getRawSql();
Run Code Online (Sandbox Code Playgroud)

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