2010-04-28 58 views
1

我在Model-> beforeFind($ queryData)中,尝试向具有belongsTo关联的模型上的queryData添加JOIN条件。不幸的是,新的JOIN引用了belongsTo关联中的一个表,所以它必须出现在查询中的belongsTo之后。CakePHP beforeFind() - 如何在添加belongsTo关联后添加JOIN条件?

这里是我的Tagged->属于关联关联关系:

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' 

如何后属于关联参加加上我参加beforeFind()?

+0

您是否曾经找到过解决方案?还是解决方法? – andygeers 2011-01-11 10:37:18

+0

我设置$ model-> recursive = -1并手动添加所有连接。 – michael 2011-01-12 12:42:13

+0

你试过解绑和绑定模型吗? – elboletaire 2011-02-15 19:52:28

回答

0

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