我正在使用cakephp 2.3.2,我需要在多个表上进行查询。如何链接这些模型以通过CakePHP关联查询多个表?
我有这个数据库:
--------------------------------------------------------------
| Users | Agents | Companies | Ads |
--------------------------------------------------------------
| id | id | id | id |
| username | name | company | title |
| password | lastname | sector | message |
| | user_id | user_id | user_id |
--------------------------------------------------------------
这些都是协会(模型):
用户
- hasOne代理
- hasOne公司
- 的hasMany广告
代理
- 属于关联用户
公司
- 属于关联用户
广告
- 属于关联用户
(注:请记住,当我补充一点,用户可以代理或一个公司的新用户。)
问题:
在我AdsController我有一个动作命名为视图,还有我看了两个参数,我从路线receve:
$this->params['id']
$this->params['sector']
我需要做一个查询,以检查是否ID真的是关联到一个Ad.id和如果部门关联到公司。部门
我想与检查它一个发现(“第一”),而不是检查
- 如果ID存在
- 如果行业存在的和它相关联到user_id
我该怎么办?
(如果查询发现Ad.id和Company.sector我需要检索广告的各个领域和公司)
此刻我查找AdsController(“第一”) /看法是:
$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检索数组:
- 广告的ID存在
- 公司的部门存在
如果上面的一个是不是“真”我想获得一个空阵列。
显然我在Ad模型中添加了可容忍的行为。
不要选择'*'。 Plus Cake会自动执行此操作。公司将被包含在您要求它包含在您的Contain中。如果没有记录匹配外键,它将是空的。 – 2013-04-09 08:47:03
@DavidYell,因为我写的公司没有显示。我只在结果中看到广告和用户数组。 – Dail 2013-04-09 08:48:01