投稿にはユーザー (belongsTo) があり、ユーザーにはプロファイル (hasOne) があります。通常はすべて機能します。投稿からユーザー、ユーザーからプロファイルにアクセスできます。
Post からは、すべて汎用の Find を使用して動作します。結果は多かれ少なかれこれです(たとえば、いくつかのキーを削除しました):
array(
'Post' => array(
'id' => '1',
'category_id' => '1',
'user_id' => '1',
'title' => 'Example',
'text' => '',
),
'User' => array(
'password' => '*****',
'id' => '1',
'group_id' => '1',
'username' => 'mirko',
'status' => 'active',
'Profile' => array(
'id' => '1',
'user_id' => '1',
'first_name' => 'Mirko',
'last_name' => 'Pagliai',
),
)
)
少数のフィールドのみを抽出したいときに「フィールド」を使用すると、問題が発生します。たとえば、これは機能します:
'fields' => array('id', 'title', 'User.id')
結果は次のとおりです。
array(
'Post' => array(
'id' => '1',
'title' => 'Articolo di prova :-)'
),
'User' => array(
'id' => '1'
)
)
しかし、常に「フィールド」を使用して、プロファイルにアクセスする方法がわかりません。これらは機能しません:
'fields' => array('id', 'title', 'User.id', 'Profile.id')
'fields' => array('id', 'title', 'User.id', 'User.Profile.id')
「エラー: SQLSTATE [42S22]: 列が見つかりません: 1054 不明な列 'User.Profile.id' in 'field list'」というエラーが常に表示されます。
どうしたの?ありがとう。
編集:私は Containable 動作を使用していません。多分これが問題ですか?この場合、それは不可欠ですか?
ページネーションを使用した例:
$this->paginate = array(
'conditions' => $conditions,
'fields' => array('id', 'title', 'User.id', 'Profile.id'),
'limit' => 10,
'recursive' => 2,
);
EDIT2: @Hoff のおかげで、私は解決策に近づいています。しかし、まだ何か問題があります (そして、Containable は非常に便利です!)。AppModel.php に次を追加しました。
...
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
...
しかし、これはうまくいきません:
$this->paginate = array(
'conditions' => $conditions,
'contain' => array(
'User' => array(
'fields' => array('id'),
'Profile' => array(
'fields' => array('id', 'full_name'),
),
),
'Category' => array(
'fields' => 'title',
),
),
'fields' => array('id', 'user_id', 'category_id', 'title', 'created', 'modified', 'published'),
'limit' => 10,
);
私が得る原因:
array(
(int) 0 => array(
'Post' => array(
'id' => '1',
'user_id' => '1',
'category_id' => '1',
'title' => 'Articolo di prova :-)',
'created' => '2012-06-21 18:46:00',
'modified' => '0000-00-00 00:00:00',
'published' => true
),
'Category' => array(
'title' => 'prova',
'id' => '1'
),
'User' => array(
'id' => '1'
)
)
)
しかし、ユーザー (電子メール、ユーザー名、パスワードなど) にフィールドを追加すると、次のように動作します。
'User' => array(
'fields' => array('id', 'username'),
'Profile' => array(
'fields' => array('id', 'full_name'),
),
),
そして私は得る:
array(
(int) 0 => array(
'Post' => array(
'id' => '1',
'user_id' => '1',
'category_id' => '1',
'title' => 'Articolo di prova :-)',
'created' => '2012-06-21 18:46:00',
'modified' => '0000-00-00 00:00:00',
'published' => true
),
'Category' => array(
'title' => 'prova',
'id' => '1'
),
'User' => array(
'id' => '1',
'username' => 'mirko',
'Profile' => array(
'id' => '1',
'full_name' => 'Mirko Pagliai'
)
)
)
)