1

私は2つのモデルを持っています。PostModel&CommentModel。
これらのクラスで2つの関係を定義しました。

<?php
class PostModel extends AppModel {
    var $name = 'Post';
    var $hasMany = array(
        'Comment' => array(
            'className' => 'Comment',
            'foreignKey' => 'post_id'
        )
    );
}
 ?>

<?php 
class CommentModel extends AppModel {
var $name = 'Comment';
var $belongsTo = array(
    'Post' => array(
        'className' => 'Post',
        'foreignKey' => 'post_id'
    )
);
}
?>

データベースには、post_id列を持つpostsテーブルとcommentsテーブルがあります。このコマンドでレコードをフェッチするときのPostControllerクラス:

$this->set('post',$this->Post->findById($id)); 

$post配列をデバッグします。この配列が表示されます。

array(
'Post' => array(
    'id' => '4',
    'title' => 'روز اول دانشگاه',
    'body' => 'سلام. روز اول بود که اومده بودیم '
    'created' => '2012-11-11 21:49:48',
    'modified' => null
)
)

[comment]行がこの配列にあると思いますが、ありません。

アプリのデバッグをネットで検索しましたが、この問題を解決できません。!!!!!

注:cakephpのバージョンは2.2.3安定しています

4

2 に答える 2

2

モデルの名前が間違っています。PostModelはPostsテーブルを含むPostである必要があり、CommentModelはコメントテーブルとpost_idを含むCommentである必要があります。さらに、Commentsモデルにpostsテーブルの「post_id」を外部キーとして検索するように指示したため、これは機能していません。これは、Posts hasMany Comments関係では正しくなく、その列が存在しないため、失敗します。モデルの規則に従う場合、実際には配列に何も渡す必要はありません。ORMはそれを理解します。

class Post extends AppModel {
    public $hasMany = array('Comment');
}
class Comment extends AppModel {
    public $belongsTo = array('Post');
}
于 2012-11-20T06:42:30.013 に答える
1

封じ込め可能なものを使用していますか?そうでない場合は、そうしてください!

public $ actsAs = array('Containable');

あなたのモデルで

その後

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

また、デイブが指摘したように、モデルの名前を変更する必要があります。したがって、「Post extends AppModel」(Post.php)と「Comment extends AppModel」(Comment.php)だけで、規則に従います。

PS:モデルから「var$name」を削除できます。?>また、phpファイルからクロージングを削除します。最後になりましたが、残りのすべての「var」の名前を「public」に変更します。

于 2012-11-19T10:33:52.140 に答える