Cakephp通过严格关联数据查询模型

Posted

技术标签:

【中文标题】Cakephp通过严格关联数据查询模型【英文标题】:Cakephp querying Model by strict associated data 【发布时间】:2016-07-10 21:29:24 【问题描述】:

我有一个模型 X,它与模型 Y 相关联。 X 有很多 Y。 Y 有一个属性“状态”。 我想找到所有 X,使得与 X 关联的所有 Y 的状态等于“活动”,即所有 Y.status =="活动"。

这是一个简化的架构:

X

id....名称

0.....测试 1.....两个

id....状态....x_id

0.....活动.....0 1.....不活动..0 2.....活跃....1 3.....活跃....1

我希望我的查询返回 ID 为 1 的 x,因为它的关联 Y 记录都处于活动状态。我不希望它返回 ID 为 0 的 x,因为它的两条 Y 记录都不活动。

我曾尝试使用连接查询,但它们通过返回两个 X 来不断返回意外结果。 我正在使用 Cakephp 2.2。

【问题讨论】:

【参考方案1】:
$data = TableRegistry::get('Y')->find()->where(['x_id' => 1);

//with assosiation
$data = TableRegistry::get('Y')->find()->where(['x_id' => 1])->contain(['X']);

这里有完整的文档http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

编辑

要按状态搜索,您可以在 where() 中添加搜索参数

$data = TableRegistry::get('Y')
                ->find()
                ->where(['x_id' => 1, 'status' => 'active'])
                ->contain(['X']);

使用 CakePHP 2.x

$data = $this->Y->find('all',
        array(
            'conditions'=>array('x_id'=>1,'status'=>'active'),
            'contain' => array('X')
        ));

【讨论】:

我使用的是 cakephp 2.2。有办法吗?另外,我想通过 Y 的“状态”来查询。 你知道在 CakePhp 2.0 中这样做吗?查询不应包含 ID。它应该以一种方式返回,如果 X 的所有 Y 状态为“活动”,它应该返回。在该示例中,只有 id=1 的 x 的所有 Y 都处于“活动”状态。我不需要明确告诉我需要 x.id = 1。 但这并不能解决问题。你能再看看这个问题吗?我希望所有 X 与它关联的所有 Y 的状态都是“活动的” 可以添加包含参数 那行不通。我只想要那些所有 Y 都处于活动状态的 X。我认为 NOT IN(其中 Y 的状态不是活动状态)查询可以。

以上是关于Cakephp通过严格关联数据查询模型的主要内容,如果未能解决你的问题,请参考以下文章

在 Cakephp 3 中保存关联模型

如何使用 cakephp 3 在不同数据库中的模型之间进行关联?

CakePHP 保存非常深的关联模型

CakePHP- 保存相关模型数据

CakePHP 2.1 - 模型关联 - 保存和查找

如何使用cakephp 3进行不同数据库中模型之间的关联?