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通过严格关联数据查询模型的主要内容,如果未能解决你的问题,请参考以下文章