CakePHP find() 关联条目的条件
CakePHP find() conditions for association entries
我有以下命令,从我的数据库中获取条目以及关联的 hasMany 条目:
$teasers = $this->Teaser->find('all', array(
'conditions' => array(
'Teaser.published' => 1
),
));
由于 hasMany
关系,现在还会获取 posts
条目。
输出如下所示:
array(
0 => array(
'Teaser' => array(
'id' => '1',
'user_id' => '63',
'token' => '56d455bc20cfb56d455bc20d08',
// this goes on
),
'Post' => array(
0 => array(
'id' => '1',
'teaser_id' => '1',
'title' => 'blabla',
'text' => 'blabla',
'published' => 1,
// this goes on
)
)
)
)
现在我的问题是,如何在 conditions
中包含一些内容以过滤 Post
条目?
当我这样输入时,出现错误:
$teasers = $this->Teaser->find('all', array(
'conditions' => array(
'Teaser.published' => 1,
'Post.published' => 1
)
));
您可以在模型中编写条件 Teaser.php
,例如
public $hasMany = array(
'Post' => array(
'className' => 'Post',
'conditions' => array('Post.published' => 1)
)
);
您应该阅读 containable and retrieving data 的文档。这些是基础。
$teasers = $this->Teaser->find('all', array(
'contain' => [
'Post' => [
'conditions' => [
'published' => 1
]
]
],
'conditions' => array(
'Teaser.published' => 1,
)
));
您收到错误的原因是您的关系是 hasMany
,因此当 Cake 执行 contain
时,它实际上是在为您的 find
执行多个查询。因此,您无法在条件中指定 'Post.published' => 1
,因为 Post
别名将不存在于主查询(检索您的预告片的查询)中。
相反,您需要将额外条件作为包含的一部分传递:-
$teasers = $this->Teaser->find('all', [
'contain' => [
'Post' => [
'conditions' => [
'Post.published' => 1
]
]
],
'conditions' => [
'Teaser.published' => 1,
]
]);
这会让 Cake 知道您在构建帖子查询时要使用的条件。
我有以下命令,从我的数据库中获取条目以及关联的 hasMany 条目:
$teasers = $this->Teaser->find('all', array(
'conditions' => array(
'Teaser.published' => 1
),
));
由于 hasMany
关系,现在还会获取 posts
条目。
输出如下所示:
array(
0 => array(
'Teaser' => array(
'id' => '1',
'user_id' => '63',
'token' => '56d455bc20cfb56d455bc20d08',
// this goes on
),
'Post' => array(
0 => array(
'id' => '1',
'teaser_id' => '1',
'title' => 'blabla',
'text' => 'blabla',
'published' => 1,
// this goes on
)
)
)
)
现在我的问题是,如何在 conditions
中包含一些内容以过滤 Post
条目?
当我这样输入时,出现错误:
$teasers = $this->Teaser->find('all', array(
'conditions' => array(
'Teaser.published' => 1,
'Post.published' => 1
)
));
您可以在模型中编写条件 Teaser.php
,例如
public $hasMany = array(
'Post' => array(
'className' => 'Post',
'conditions' => array('Post.published' => 1)
)
);
您应该阅读 containable and retrieving data 的文档。这些是基础。
$teasers = $this->Teaser->find('all', array(
'contain' => [
'Post' => [
'conditions' => [
'published' => 1
]
]
],
'conditions' => array(
'Teaser.published' => 1,
)
));
您收到错误的原因是您的关系是 hasMany
,因此当 Cake 执行 contain
时,它实际上是在为您的 find
执行多个查询。因此,您无法在条件中指定 'Post.published' => 1
,因为 Post
别名将不存在于主查询(检索您的预告片的查询)中。
相反,您需要将额外条件作为包含的一部分传递:-
$teasers = $this->Teaser->find('all', [
'contain' => [
'Post' => [
'conditions' => [
'Post.published' => 1
]
]
],
'conditions' => [
'Teaser.published' => 1,
]
]);
这会让 Cake 知道您在构建帖子查询时要使用的条件。