我试图从另一个表(端口(两次加入表(连接(。
条件是:
- 一个端口可以有一个或没有连接
- 一个连接有一个从港口和一个端口的连接
结构是:
表端口:
- id
- 数字
表连接:
- id
- port_from_id
- port_to_id
- 名称
所以现在我想从端口加入连接。
蛋糕总是给我的:
LEFT JOIN connections Connections ON Ports.id = (Connections.port_from_id)
,但必须是:
LEFT JOIN connections Connections ON Ports.id = (Connections.port_from_id) OR Ports.id = (Connections.port_to_id)
或等效的东西。
我的端口模型实际上是这样的:
$this->hasOne('Connections', [
'foreignKey' => 'port_from_id',
'joinType' => 'LEFT'
]);
我如何在连接中获得"或条件"?
谢谢!
您必须禁用联想外键处理(IIRC仅适用于使用hasOne
策略的CC_1关联,它也适用于belongsTo
(,并自行提供条件,因为不支持多个外国密钥(与复合外国钥匙不同(。
沿着:
的线条use CakeDatabaseExpressionIdentifierExpression;
// ...
$this->hasOne('Connections', [
'foreignKey' => false,
'conditions' => [
'OR' => [
'Connections.port_from_id' => new IdentifierExpression($this->aliasField('id')),
'Connections.port_to_id' => new IdentifierExpression($this->aliasField('id')),
]
]
]);
应该创建类似于:
的SQLLEFT JOIN
`connections` `Connections` ON (
`Connections`.`port_from_id` = (`Ports`.`id`) OR
`Connections`.`port_to_id` = (`Ports`.`id`)
)
另请参见
- cookbook>数据库访问&ORM> sosidemiations> hasone关联