【问题标题】:Cakephp querying Model by strict associated dataCakephp通过严格关联数据查询模型
【发布时间】: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。

【问题讨论】:

    标签: php cakephp associations models 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 的状态不是活动状态)查询可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多