CakePHP3:如何将参数传递给join()?

时间:2017-04-01 16:41:04

标签: cakephp-3.0

我有DefaultPermissions表,因此设置了default permissions,我想将此集与受特定网站影响的permissions集进行比较,以查看是否存在附加默认权限

所以我写了以下查询:

$defaultPermissions = $this->DefaultPermissions
->find()
->select([
    'user_id' => $selUser->id,
    'role',
    'sequence',
    'product',
    'module',
    'item',
    'value',
    'visible',
    'editable'
])
->join([
    'p' => [
        'table' => 'permissions',
        'type' => 'LEFT',
        'conditions' => [
            'p.product = DefaultPermissions.product',
            'p.module = DefaultPermissions.module',
            'p.item = DefaultPermissions.item',
            'p.site_id' => $selSite->id   // My problem is here!
        ]
    ]
],
[
    'p.product' => 'varchar', 
    'p.module' => 'varchar', 
    'p.item' => 'varchar',
    'p.site_id' => 'integer'
])
->where([
    'DefaultPermissions.role' => $selUser->role,
    'p.item IS' => NULL, // item doit toujours être présent donc si null, la ligne est absente.
    'OR' => [['DefaultPermissions.product' => $agplan->product->code], ['DefaultPermissions.product' => '']]
])
->all();

但是,尽管可以找到网站defaultPermissions的所有selSite->id,但查询会提供DefaultPermissions表中存在的完整列表。 如果我删除行'p.site_id' => $selSite->id,则列表按预期为空,因此我得出结论,传递的参数没有很好地解释。

怎么做?

1 个答案:

答案 0 :(得分:0)

连接中只有语法错误:

->join([
    'p' => [
        'table' => 'permissions',
        'type' => 'LEFT',
        'conditions' => [
            'p.product = DefaultPermissions.product',
            'p.module = DefaultPermissions.module',
            'p.item = DefaultPermissions.item',
            'p.site_id = ' => $selSite->id   // '=' was missing
        ]
    ]
],
....