CakePHP-模型关联/绑定

CakePHP-模型关联/绑定,cakephp,model,model-binding,model-associations,Cakephp,Model,Model Binding,Model Associations,我希望绑定模型,主要是因为数据源从一个模型更改为另一个模型。假设我有以下疑问: SELECT ext.col1, ext.col2, ext.col3, COUNT(*) Link Count FROM `external.`Media` ext INNER JOIN `internal`.`links` l ON ext.someId = links.id INNER JOIN `internal`.tags t ON l.tag_id = t.tag_id WHERE t.parent_t

我希望绑定模型,主要是因为数据源从一个模型更改为另一个模型。假设我有以下疑问:

SELECT ext.col1, ext.col2, ext.col3, COUNT(*) Link Count
FROM `external.`Media` ext 
INNER JOIN `internal`.`links` l ON ext.someId = links.id
INNER JOIN `internal`.tags t ON l.tag_id = t.tag_id
WHERE t.parent_tag_id = 1098
AND t.metadata = 'someValue'
GROUP BY ext.col1, ext.col2, ext.col3
因此,我有3个模型,数据来自这些模型。目前,我在媒体模型中有以下内容:

public $belongsTo = array(
            'Links' => array(
                'className' => 'Links',
                'foreignKey' => 'someId',
            ),
            'Tag' => array(
                'className' => 'Tag'
            )
        );
然后在其他模型中:

标签模型

链接模型

然后回到媒体模型中,我使用find,希望设置模型绑定:

return $this->find("all", array(
    'conditions' => array(
        'Tag.metadata' => $username
    )
));
这将生成一个错误:

错误:SQLSTATE[42S22]:找不到列:“where子句”中的1054未知列“Tag.metadata”

我假设发生这种情况是因为找不到表

[SQL生成]

这基本上表明绑定不正确/没有发生

基本上,我想替换以下内容,以避免动态使用连接,因为这些连接需要应用于每个查询。。因此,模型绑定

这对我来说是可行的,但我想将其转换为使用模型绑定:

return $this->find("all", array(
                "joins" => array(
                    array(
                        "table" => "internal.links",
                        "alias" => "Link",
                        "type" => "INNER",
                        "conditions" => array(
                            "Link.id = Media.someId"
                        )
                    ),
                    array(
                        "table" => "internal.tags",
                        "alias" => "Tag",
                        "type" => "INNER",
                        "conditions" => array(
                            "Tag.tag_id = Link.tag_id",
                            "Tag.parent_tag_id = 3214",
                            "Tag.metadata" => $username
                        )
                    ),
                )
            ));

生成的SQL语句是什么?@AgRizzo我更新了问题以包含SQL语句也许您可以使用beforeFind方法自动添加这些连接。@AgRizzo我当然可以这样做。。并有助于不必为每个查询设置联接。。然而,我希望用模型绑定来实现这一点,因为我认为这是一个非常实用的例子,应该使用模型绑定。当你说模型绑定时,你是指模型的关联吗?在Cakephp 2.x中,当表位于不同的数据库中时,模型关联不会创建联接。
return $this->find("all", array(
    'conditions' => array(
        'Tag.metadata' => $username
    )
));
    SELECT `Media`.`media_id`, `Media`.`mediatype`, `Media`.`created`, `Media`.`active_flag`, 
`Media`.`mediafile`, `Media`.`fallbackfile`, `Media`.`setupId`, `Media`.`externalId`, 
`Media`.`width`, `Media`.`height`, `Media`.`brands`, `Media`.`languages`, `Media`.`products`, 
`Media`.`projects`, `Media`.`affiliates`, `Media`.`description`, `Media`.`linking_code` FROM 
`external`.`ext_media_gallery` AS `Media` WHERE `Tag`.`metadata` = 'testuser' AND 
`MediaGallery`.`active_flag` = 'active' AND ((FIND_IN_SET('testuser', `Media`.`affiliates`)) OR 
(`Media`.`affiliates` = ''))
return $this->find("all", array(
                "joins" => array(
                    array(
                        "table" => "internal.links",
                        "alias" => "Link",
                        "type" => "INNER",
                        "conditions" => array(
                            "Link.id = Media.someId"
                        )
                    ),
                    array(
                        "table" => "internal.tags",
                        "alias" => "Tag",
                        "type" => "INNER",
                        "conditions" => array(
                            "Tag.tag_id = Link.tag_id",
                            "Tag.parent_tag_id = 3214",
                            "Tag.metadata" => $username
                        )
                    ),
                )
            ));