3

我有一个节点表(Node模型)。我希望它与不同的数据类型相关联,但前提是它的字段设置为1.

例子:

我的nodes表有一个data_article字段 ( tinyint 1)。我只希望节点$hasMany Article如果该字段为 1。

我试过这个:

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

但我收到一个错误:

未找到列:1054 'where 子句'中的未知列'Node.data_articles'

因为该协会正在自己的查询中查找文章:

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')

显然这不起作用,因为在此查询中根本没有加入节点表。

TLDR:

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

4

2 回答 2

1

我认为使用 CakePHP 没有标准的方法来做到这一点(至少我无法想象一种方法)。绝对可能的是动态绑定相关模型

因此,您可以通过将recursive参数传递-1find()方法并根据结果动态地解除关联模型来查询没有关联的模型。之后,您肯定会再次查询。您可能会基于此构建一个行为以使其可重用。

如果 Cake 可以在查询主模型之后但在查询关联模型之前使用回调进行两步查询,那么一个非常优雅的解决方案将是可能的,但目前这是不可能的。

编辑:可能有一种非蛋糕的方式可以使用包括IF-statements的自定义查询来更高效地归档它,但我不是这里的 SQL 专家。

于 2012-08-23T09:17:06.017 回答
-2

你应该从另一边做:

public $belongsTo = array(
'Node' => array(
    'conditions' => array('Node.data_articles' => '1')
  ),
);
于 2012-08-11T08:21:19.580 回答