私は多くの関係を持っている必要があり、私のモデルの研究」2. 私はCakePHPによる理解していない奇妙な行動が生じていますが依存するデータを取得しますデータのすべてを取得する場合、私はこれをしようとするまで良く見えるcakephpの2条件は、子テーブル
class ExecutedStudyTable extends AppModel {
public $belongsTo= array(
'Study' => array(
'className' => 'Study',
'foreignKey' => 'study_id'
),
'User' => array(
'className' => 'User',
'foreignKey' => false,
'conditions' => array('ExecutedStudyTable.user_id = User.id')
)
);
} :
ExecutedtStudyTableモデルは次のようになります0私はこのエラーを取得する:Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ExecutedStudyTable.user_id' in 'where clause'
CakePHPはこのように、このクエリを作成します:
SELECT `Study`.`id`, `Study`.`user_id`, `Study`.`created`, `Study`.`modified`, `Study`.`started`, `Study`.`completed`, `Study`.`title`, `Study`.`description`, `Study`.`numberParticipants`, `Study`.`state`, `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`firstName`, `User`.`familyName`, `User`.`email`, `User`.`addressStreet`, `User`.`addressCity`, `User`.`addressZip`, `User`.`phone1`, `User`.`phone2`, `User`.`created`, `User`.`modified`, `User`.`passwordResetCode`, `User`.`passwordResetDate`, `User`.`sendUsernameDate`, `SubjectFilter`.`id`, `SubjectFilter`.`study_id`, `SubjectFilter`.`m`, `SubjectFilter`.`f`, `SubjectFilter`.`age18_24`, `SubjectFilter`.`age25_34`, `SubjectFilter`.`age35_44`, `SubjectFilter`.`age45_54`, `SubjectFilter`.`age55plus`, `SubjectFilter`.`studyCode` FROM `eyevido`.`studies` AS `Study` LEFT JOIN `eyevido`.`users` AS `User` ON (`Study`.`user_id` = `User`.`id`) LEFT JOIN `eyevido`.`subject_filters` AS `SubjectFilter` ON (`SubjectFilter`.`study_id` = `Study`.`id`) WHERE `Study`.`user_id` = 1402402538 AND ((`Study`.`state` = 'active') OR (`Study`.`state` = 'rehearsal')) AND `SubjectFilter`.`studyCode` IS NULL AND `ExecutedStudyTable`.`user_id` = 1130451831
ExecutedStudyTableはSubjectFilterのように参加していないと何のエイリアスは、テーブル用に定義されていません。これはhasMany関係ではなく、hasOne関係で正しく動作するのはなぜですか?どこでミスをしますか?
私はあなたが関連付けられているモデルのフィールドでモデルをフィルタリングする場合、一つの方法は、Joining tablesであるあなたの回答
私はあなたが言ったように、私のモデルSubjectFilterとhasOneの関係で自動的に結合が行われるのですか?私はこのためのエラーメッセージを取得しないと、結合は、SQLクエリで見るようにケーキによって行われます –
実際には、それはhasOneの関係とは何の関係もありません。結合は独立して機能します。そのため、 'recursive = -1'を追加したのは –
古いバージョンのCakePHP 1と2では、関連するモデルに基づいてデータをフィルタリングすることは困難です。 Containableビヘイビアを使用できますが、私はJOINを好きです。 CakePHP 3.xの場合、包含動作がより適切で柔軟性があります –