我有两个表如下

桌子halte:

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`)
)

桌台:
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表在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。

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

最佳答案

检查您的 Activity 查询生成的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生成的代码与您手动创建的代码进行比较。

08-07 06:02