如何修改CakePHP的连接条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改CakePHP的连接条件相关的知识,希望对你有一定的参考价值。

That is my Query object dump from debug...

我想在方法JOIN子句中添加更多条件,或者我想在Cakephp执行连接时设置默认条件。

我的代码:

public function beforeFind(Event $event, Query $query)
{
    if ($query->join()) {
        foreach ($query->join() as $key => &$join) {
            $join['conditions'] = new QueryExpression('"aaaa" = "bbbbb"');
        }

        return $query;
    }
}
答案

你可以检查CakePHP Docs

我相信你搜索的是这样的:

class CustomerTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasOne('User')
            ->setName('User')
            ->setConditions(['User.active' => '1']) // or any other additional clause
            ->setDependent(true);
    }
}

我建议你使用innerJoinWith,如果你需要挂钩你的正常关联行为。

作为硬编码解决方案(我可以从您的代码示例中看到),请阅读join method docs

 $query->join([
   'user' => [
       'table' => 'user',
       'type' => 'INNER',
       'conditions' => '"aaaa" = "bbbbb"'
   ]
]);

现在一些心灵感应,... abracadabra,...等待等待......试试这个:

public function beforeFind(Event $event, Query $query)
{
    $joins = $query->join();
    if ($joins) {
        foreach ($joins as $key => &$join) {
            if ($key == 'user')
                $join['conditions'] = ($join['conditions'] ? ' AND ' : '') . ' "aaaa" = "bbbbb"';
        }

        return $joins ? $query->join($joins) : $query;
    }
}

以上是关于如何修改CakePHP的连接条件的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP:如何使用内部联接从两个表中检索数据?

Cakephp - 条件保存

CakePHP 查找两个日期之间查询的条件

如何将 URL 编码为 CakePHP 参数

如何使用 CakePHP 3 连接多个表?

如何有条件地将 C 代码片段编译到我的 Perl 模块?