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エージェント
- ハスワンカンパニー
- hasMany 広告
エージェント
- 所属するユーザー
会社
- 所属するユーザー
広告
- 所属するユーザー
(注: 新しいユーザーを追加するとき、そのユーザーはエージェントまたは会社である可能性があることに注意してください。)
質問:
私のAdsControllerには、 viewという名前のアクションがあり、Route から受け取る 2 つのパラメーターを読み取ります。
$this->params['id']
$this->params['sector']
IDが実際にAd.idに関連付けられているかどうか、およびセクターが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 が存在する
- 会社のセクターが存在する
上記のいずれかが「真」でない場合、空の配列を取得したいと思います。
明らかに、Ad モデルに Containable 動作を追加しました。