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。
有什么办法可以解决这个问题吗?
我非常感谢您的意见/帮助。
谢谢。
检查活动查询生成的 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 生成的代码与您手动创建的代码进行比较..
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |