2012-08-11 40 views
3

我有一个节点表(Node模型)。我希望它与不同的数据类型相关联,但只有当它的字段设置为1时才有效。根据主模型的数据可能有关联吗?

实施例:

nodes表具有data_article字段(tinyint 1)。我只希望节点$hasMany Article该字段是1

我尝试这样做:

public $hasMany = array(
    'Article' => array(
     'conditions' => array('Node.data_articles' => '1') 
    ), 
); 

但我得到一个错误:

Column not found: 1054 Unknown column 'Node.data_articles' in 'where clause'

因为联想是做找条在它自己的查询中:

SELECT `Article`.`id`, `Article`.`title`, `Article`.`node_id`, ...more fields... 
FROM `mydatabase`.`articles` AS `Article` 
WHERE `Node`.`data_artiles` = '1' 
AND `Article`.`node_id` = ('501991c2-ae30-404a-ae03-2ca44314735d') 

显然这不起作用,因为Node表是在这个查询中根本没有加入。

TLDR:

是否有可能有关联,或在主模式不是基于场?如果没有,我还可以如何将不同的数据类型保存在多个表中,而不必每次都查询它们?

回答

1

我不认为有使用CakePHP做到这一点的标准方式(至少我无法想象的方式)。可以肯定的是binding associated models dynamically

所以,你可能会通过将recursive参数作为-1find()方法,并根据结果unbind的关联模型动态查询你的模型没有关联。之后,您必须再次查询,当然。你可以建立一个behavior以使其可重用。

如果在查询主模型之后,但在查询相关模型之前,Cake可以使用callback进行两步查询,但此时不可能,那么可能会有一个相当优雅的解决方案。

编辑:可能有一种非Cake方式使用自定义查询来更高效地执行此操作,包括IF-statements,但我不是SQL专家。

+0

工作 - 谢谢。可能更好地执行快速查询,如果它通过1-4连接减少主要查询。 – Dave 2012-08-23 13:18:16

-2

你应该从另一个方面做到这一点:

public $belongsTo = array(
'Node' => array(
    'conditions' => array('Node.data_articles' => '1') 
), 
); 
+1

这不起作用 - 关联必须在您正在进行查找的模型上。如果我只用这种方式进行关联,那么当我执行Node-> find()时,我无法检索额外的数据。而且它不会被迫从实际数据中进行查询,因为我甚至不知道要查询哪些数据。 – Dave 2012-08-11 14:15:59

相关问题