如何创建一个通过OR条件连接多个外键的hasOne关联?

时间:2018-02-23 15:48:39

标签: php cakephp join foreign-keys cakephp-3.x

我正在尝试从另一个表(Ports)连接两次表(Connections)。

条件是:

  • 一个端口可以有一个连接或没有连接
  • 一个连接有一个从端口和一个到端口

结构是:

表端口:

  • ID

表连接:

  • ID
  • port_from_id
  • port_to_id
  • 名称

所以现在我想从Ports加入到Connections。

Cake总是给我这个:

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)

或类似的东西。

My Ports-Model实际上是这样的:

$this->hasOne('Connections', [
            'foreignKey' => 'port_from_id',
            'joinType' => 'LEFT'
        ]);

如何在我的加入中获得OR条件?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须禁用关键外键处理(IIRC这仅适用于使用hasOne策略的JOIN关联,可能适用于{{1}因为不支持多个外键(与复合外键不同),所以自己提供条件,并自行提供条件。

有些事情:

belongsTo

那应该创建类似于:

的SQL
use Cake\Database\Expression\IdentifierExpression;

// ...

$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')),
        ]
    ]
]);

另见