0

現在、私のモデル関係船は次のように設定されています

class Post extends AppModel {
    var $name = 'Post';
    var $displayField = 'title';
    var $hasMany = array('Comment');
    var $belongsTo = array('User');
 }

 class User extends AppModel {
    var $name = 'User';
    var $displayField = 'username';
    var $hasMany = array('Post', 'Comment');
 }

 class Comment extends AppModel {
    var $name = 'Comment';
    var $displayField = 'id';
    var $belongsTo = array('User', 'Post');
 }

投稿ビューのコメント セクションでユーザー名を参照しようとすると、無効なインデックスを示すエラーが発生し、さらに調査したところ、モデルにはユーザー情報のみがコメントの後方参照として含まれていないことに気付きました。投稿に含まれています

結果の配列は次のようになります。

Array
(
    [Post] => Array
        (
            [id] => 1
            [title] => test post
            [user_id] => 1
            [body] => this is a test post 
            [date_posted] => 0000-00-00 00:00:00
            [url_slug] => this-is-a-test-post
        )

    [User] => Array
        (
            [id] => 1
            [username] => admin
            [password] => e7b9f7bc09beee85947ef987d7df49df136c7c38
            [first_name] => Chris
            [last_name] => McGrath
            [roles] => Admin
            [email] => admin@thissite.com
            [last_login] => 0000-00-00 00:00:00
            [member_since] => 0000-00-00 00:00:00
            [FacebookProfile] => 
            [TwitterUserName] => 
        )

    [Comment] => Array
        (
            [0] => Array
                (
                    [id] => 5
                    [post_id] => 1
                    [user_id] => 1  //expecting this to pull user model for each 
                    [comment] => test comment
                )

        )

)

私の質問は、これはモデルの関連付けで私が間違ってやっていることが原因ですか、これはモデルフレームワークの制限ですか、それともこのタイプのインスタンスでユーザーモデルから手動でユーザーを取得する必要がありますか?

4

2 に答える 2

0

次のようなことを試してください。

$this->Post->recursive = 2; //This will get all the comments and their relationships
$post = $this->Post->read(null,$post_id); //The way you were getting your post.
debug($post); // You will see what it gets

編集: あなたもこれを試すことができます:

$this->Post->Comment->recursive = 2;
于 2011-03-31T17:44:57.763 に答える
0

recursive = 2 を使用することは決して良い考えではありません。

$this->Post->find(
    'first',
    array(
        'conditions' => array(
            'Post.id' => $id
        ),
        'contain' => array(
            'User',
            'Comment' => array(
                'User' => array(
                    'fields' => array(
                        'User.id',
                        'User.name'
                    )
                )
            )
        )
    )
);

http://book.cakephp.org/view/1323/Containable

于 2011-03-31T22:27:20.713 に答える