1

だから、私は自分のリクエストの1つを改ページしたいと思います。「通常の方法」ではうまくいかなかったようです。

$this->paginate("Like",
    array("Like.user_id" => $id),
    array(
        "order" => "Like.created desc",
        "contain" => array(
            "User",
            "Post",
            "Post.User",
            "Post.Like"
        )
    )
);

問題は...それが機能しないことです。Adebugは私にそのようなものを与えます:

array(
    (int) 0 => array(
        'Like' => array(
            'id' => '38',
            'created' => '2012-10-03 21:21:27',
            'post_id' => '29',
            'user_id' => '19'
        ),
        'Post' => array(
            'id' => '29',
            'title' => 'Don't Panic',
            'description' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam elementum sem ac sem imperdiet cursus. Quisque venenatis pulvinar ornare. Donec rutrum, lacus vel imperdiet sagittis, metus risus interdum ante, iaculis venenatis arcu nibh et odio.',
            'image' => '29-c49cb96c.jpg',
            'model' => '',
            'created' => '2012-09-07 01:46:49',
            'user_id' => '19',
            'project_id' => '1',
            'like_count' => '1'
        ),
        'User' => array(
            'password' => '*****',
            'id' => '19',
            'username' => 'Axiol'
        )
    )
)

Post.Userとの痕跡はありませんPost.Like...

何か案が ?

編集:

モデルの関連付けは次のとおりです。

役職

public $belongsTo = array("User", "Project");
public $hasMany = array("Comment", "Like");

お気に入り

public $belongsTo = array("User", "Post" => array("counterCache" => true));

ユーザー

public $hasMany = array("Post", "Comment");
4

3 に答える 3

2

まず、containOldskool が答えたように、実際に配列を修正する必要があります。

ケーキは次のように通過するため、これは非常に明白なはずです。

Warning (512): Model "Post.Like" is not associated with model "Like" 
[CORE\Cake\Model\Behavior\ContainableBehavior.php, line 342]

実際の問題のために、おそらくそれを見ませんでした。

何らかの方法で動作をロードしているかどうかについては言及していませんContainable。私はあなたがそうではないと仮定しています、そしてあなたはそれを持っています。配列はcontain完全に無視されています。

動作のドキュメントは次のとおりContainableです。AppModel::actsAs次のようにプロパティに追加することをお勧めします。

class AppModel extends Model {
    public $actsAs = array('Containable');
}

このようにして、すべてのモデルで自動的に使用できるようになり、recursive狂気の使用も停止する必要があります。

お役に立てれば。

于 2013-03-01T03:19:04.850 に答える
1

デイブがすでに述べたように、あなたのモデル名はオフです。その表記を使用するのではなく、ロードするモデルの下に「ネストされた」モデルとして含める必要があります。このような:

"contain" => array(
    "User",
    "Post" => array(
        "User", // Get post related user data
        "Like" // Get post related like data
    )
)
于 2012-12-30T00:21:47.043 に答える
1

Post.Userand を削除します- これらはモデルではないため、配列Post.Likeにリストするべきではありません。contain

それらがモデル名である場合、つまり、モデルで$nameそのように指定した場合 (命名規則に違反していても)、モデルとその関連付けを投稿してください。さらに調査できます。

于 2012-12-29T22:38:37.257 に答える