我正在使用cakephp 2.3.2,我需要对多个表进行查询。
我有这个数据库:
--------------------------------------------------------------
| Users | Agents | Companies | Ads |
--------------------------------------------------------------
| id | id | id | id |
| username | name | company | title |
| password | lastname | sector | message |
| | user_id | user_id | user_id |
--------------------------------------------------------------
这些是关联(模型):
用户
代理
公司
广告
( 注意: 请注意,当我添加新用户时,用户可以是代理或 a公司。)
问题:
在我的 AdsController 中,我有一个名为 view 的动作,在那里我读了两个我从路线接收的参数:
$this->params['id']
$this->params['sector']
我需要进行查询以检查 id 是否真的与 Ad.id 相关联,如果 < em> sector 与 Company.sector
相关联我想查看 ONE find('first') 而不是 检查
我怎么能这样做?
(如果查询找到Ad.id和Company.sector,我需要检索广告和公司的所有字段)
目前我在AdsController / view中的发现('第一个')是:
$options = array(
'fields' => array(
'Ad.*'
),
'contain' => array(
'User' => array(
'Company' => array(
'fields' => array(
'Company.*'
),
'conditions' => array(
'Company.sector' => $this->params['sector'],
),
)
)
),
'conditions' => array(
'Ad.id' => $this->params['id'],
)
)
$data = $this->Ad->find('first', $options);
debug($data);
问题是公司现在显示在结果(数组)中。
请记住,我只需要检索数组IF:
如果上面的某个不是“真”,我想得到一个空数组。
显然我在广告模型中添加了可包含的行为。
答案 0 :(得分:0)
我已经看过这个,有同样的问题,由于某种原因包含,有点故障与该array()结构,也许它的工作方式是什么意思,但我不明白,无论如何反转链依赖我使用这种结构:
$options = array(
'contain' => array(
'User',
'User.Company' => array(
'conditions' => array(
'Company.sector' => $this->params['sector'],
),
)
),
'conditions' => array(
'Ad.id' => $this->params['id'],
)
)
但是,您需要记住,包含的条件与主模型的条件不同,因此即使公司部门不存在,但是具有给定ID出口的广告也不会收到空集。据我所知,如果模型之间没有直接关联,则不能使用条件来排除结果。所以你仍然需要检查$result['User']['Company']
是否为空集。
您的查询数组与您提出的问题所提供的结构不一致,sector
表格中没有字段Company