【发布时间】:2013-04-09 06:50:16
【问题描述】:
我使用的是 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 |
--------------------------------------------------------------
这些是关联(模型):
用户
- 有一个代理
- hasOne 公司
- 有很多广告
代理
- 属于用户
公司
- 属于用户
广告
- 属于用户
(注意: 请记住,当我添加新用户时,该用户可能是代理或公司。)
问题:
在我的 AdsController 中,我有一个名为 view 的操作,在那里我读取了从 Route 收到的两个参数:
$this->params['id']
$this->params['sector']
我需要进行查询以检查 id 是否真的与 Ad.id 相关联,如果 sector 与 Company.sector
相关联我想用 ONE find('first') 而不是检查来检查
- 如果 ID 存在
- 如果扇区存在并且关联到 user_id
我该怎么做?
(如果查询找到 Ad.id 和 Company.sector 我需要检索 Ad 和 Company 的所有字段)
目前我在 AdsController/view 中的 find('first') 是:
$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);
问题是 Company 现在显示在结果(数组)中。
请记住,我只需要检索数组 IF:
- AD 的 ID 存在
- 公司所属部门存在
如果上述之一不是“真”,我想得到一个空数组。
显然我在广告模型中添加了可包含行为。
【问题讨论】:
-
不要
select *。 Plus Cake 会自动执行此操作。公司将按照您的要求包含在您的包含中。如果没有记录与外键匹配,则为空。 -
@DavidYell 在我写的时候没有显示公司。我只在结果中看到 Ad 和 User 数组。
标签: php cakephp cakephp-2.0