Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp beforeFind()-在添加belongsTo关联后,如何添加连接条件?_Cakephp - Fatal编程技术网

Cakephp beforeFind()-在添加belongsTo关联后,如何添加连接条件?

Cakephp beforeFind()-在添加belongsTo关联后,如何添加连接条件?,cakephp,Cakephp,我在Model->beforeFind$queryData中,试图在具有belongsTo关联的模型上向queryData添加连接条件。不幸的是,新联接引用了belongsTo关联中的一个表,因此它必须出现在查询中belongsTo之后 这是我的标记->归属关联: app\plugins\tags\models\tagged.php (line 192) Array ( [Tag] => Array ( [className] => T

我在Model->beforeFind$queryData中,试图在具有belongsTo关联的模型上向queryData添加连接条件。不幸的是,新联接引用了belongsTo关联中的一个表,因此它必须出现在查询中belongsTo之后

这是我的标记->归属关联:

app\plugins\tags\models\tagged.php (line 192)
Array
(
    [Tag] => Array
        (
            [className] => Tag
            [foreignKey] => tag_id
            [conditions] => 
            [fields] => 
            [order] => 
            [counterCache] => 
        )

    [Group] => Array
        (
            [className] => Group
            [foreignKey] => foreign_key
            [conditions] => Array
                (
                    [Tagged.model] => Group
                )

            [fields] => 
            [order] => 
            [counterCache] => 
        )

)
以下是在Tagged->beforeFind中添加的联接,请注意,尚未添加以下联接:

app\plugins\tags\models\tagged.php (line 194)
Array
(
    [conditions] => Array
        (
            [Tag.keyname] => europe
        )

    [fields] => Array
        (
            [0] => DISTINCT Group.*
            [1] => GroupPermission.*
        )

    [joins] => Array
        (
            [0] => Array
                (
                    [table] => permissions
                    [alias] => GroupPermission
                    [foreignKey] => 
                    [type] => INNER
                    [conditions] => Array
                        (
                            [GroupPermission.model] => Group
                            [0] => GroupPermission.foreignId = Group.id
                            [or] => Array
                                ( ... )
                        )

                )

        )

    [limit] => 
    [offset] => 
    [order] => Array
        (
            [0] => 
        )

    [page] => 1
    [group] => 
    [callbacks] => 1
    [by] => europe
    [model] => Group
)
检查输出时,由于“on子句”中的1054:未知列“Group.id”失败,因为权限联接出现在组联接之前

    SELECT DISTINCT `Group`.*, `GroupPermission`.*
    FROM `tagged` AS `Tagged`
    INNER JOIN permissions AS `GroupPermission` ON (`GroupPermission`.`model` = 'Group' AND `GroupPermission`.`foreignId` = `Group`.`id` AND (...))
    LEFT JOIN `tags` AS `Tag` ON (`Tagged`.`tag_id` = `Tag`.`id`)
    LEFT JOIN `groups` AS `Group` ON (`Tagged`.`foreign_key` = `Group`.`id` AND `Tagged`.`model` = 'Group')
    WHERE `Tag`.`keyname` = 'europe'
但是,将此SQL(具有加入的权限)移动到最后,可以正常工作:

    SELECT DISTINCT `Group`.*, `GroupPermission`.*
    FROM `tagged` AS `Tagged`
    LEFT JOIN `tags` AS `Tag` ON (`Tagged`.`tag_id` = `Tag`.`id`)
    LEFT JOIN `groups` AS `Group` ON (`Tagged`.`foreign_key` = `Group`.`id` AND `Tagged`.`model` = 'Group')
    INNER JOIN permissions AS `GroupPermission` ON (`GroupPermission`.`model` = 'Group' AND `GroupPermission`.`foreignId` = `Group`.`id` AND (...))
    WHERE `Tag`.`keyname` = 'europe'

如何在belongsTo加入之前查找之后添加我的加入

联接不能引用关联中的任何内容,因为关联是通过单独的查询获取的。如果需要添加引用关联的联接,则还需要在联接中手动添加关联。

是否找到解决方案?或者解决方法?我设置$model->recursive=-1并手动添加所有连接。您是否尝试过解除绑定和绑定模型?是的。手动添加联接==解除绑定模型。我不确定什么时候会再次绑定它,因为我手动并按照正确的顺序添加了连接。