2

Posts と Likes の 2 つのテーブルがあります。

そして、現在ログインしているユーザーが気に入っている投稿を一覧表示しようとしています。メソッドは次のようになります。

$following = $this->Follower->listFollowing($this->Auth->user('id'));

$this->paginate = array('limit'=>20,'conditions'=>array('Post.id'=>array($following['Follower']['post_id']),'Post.status'=>array(1,2)),'order'=>array('Post.datetime'=>'desc'),
                        'contain'=>array('User','Answer'=>array('User'),'Tag'));

$this->set('posts',$this->paginate());

したがって、基本的に私がやろうとしているのは、最初にユーザーに一致するすべての行について次の (いいね) テーブルをクエリし、検索クエリでこの投稿 ID の配列を使用して、クエリに含まれていた投稿を一覧表示することです。

Follower モデルの listFollowing メソッドは次のようになります。

public function listFollowing($user_id)
    {
        return $this->find('all', array( 
            'conditions' => array('Follower.user_id'=>$user_id) 
        ));
    }

現在、次のようなエラーが発生Undefined index: Follower [APP/Controller/PostsController.php, line 94]しています。検索クエリで次の投稿 ID のリストを渡そうとしている方法が間違っていると思います。

誰でも助けることができますか?ありがとう

編集: $following でデバッグを行うと、次のようになります。

array(
    (int) 0 => array(
        'Follower' => array(
            'id' => '4',
            'user_id' => '6',
            'post_id' => '136'
        ),
        'User' => array(
            'password' => '*****',
            'id' => '6',
            'username' => 'driz',
            'email' => '######'
        ),
        'Post' => array(
            'id' => '136',
            'user_id' => '8',
            'datetime' => '2012-09-11 15:49:52',
            'modified' => '2012-09-16 15:31:38',
            'title' => 'Test Content',
            'slug' => 'Test_content',
            'content' => 'Test Content',
            'status' => '1'
        )
    ),
   (int) 1 => array(
        'Follower' => array(
            'id' => '5',
            'user_id' => '6',
            'post_id' => '133'
        ),
        'User' => array(
            'password' => '*****',
            'id' => '6',
            'username' => 'driz',
            'email' => '######'
        ),
        'Post' => array(
            'id' => '134',
            'user_id' => '8',
            'datetime' => '2012-09-11 15:49:52',
            'modified' => '2012-09-16 15:31:38',
            'title' => 'Test Content 2',
            'slug' => 'Test_content_2',
            'content' => 'Test Content 2',
            'status' => '1'
        )
    )
)
4

2 に答える 2

1

いくつかの質問:

  • どのクエリが実行されているか確認しましたか? 実行された場合、おそらくメソッドは正しいです。
  • $following は入力されていますか? デバッグするとどうなりますか?

  • 「all」で取得している場合、結果は次のようになります。

配列(

    [0] => Array
        (
            [ModelName] => Array
                (
                    [id] => 83
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

            [AssociatedModelName] => Array
                (
                    [id] => 1
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

        )
)

したがって、$following['Follower'] で何かを見つけることはできません。これについてはCakeのドキュメントを確認してください

あなたのコメントに基づいて、IDのリストが必要な場合は、メソッド内でこれを試してください:

public function listFollowing($user_id)
{
    return $this->find('list', array(
      'conditions' => array('Follower.user_id'=>$user_id) 
      'fields' => array('Follower.user_id'),
      'recursive' => 0);
}

「リスト」取得モードはまさにそれを行います。

于 2012-12-15T23:22:13.280 に答える
0

この限られた情報でエラーを推測するのは困難ですが、$following配列に関連する PHP エラーであると推測しています。

関数呼び出しdebug($following)の後に入れてみてもらえますか? listFollowing()したがって、最終的には次のようになります。

$following = $this->Follower->listFollowing($this->Auth->user('id'));

debug($following);

$this->paginate = array('limit'=>20,'conditions'=>array('Post.id'=>array($following['Follower']['post_id']),'Post.status'=>array(1,2)),'order'=>array('Post.datetime'=>'desc'),
                        'contain'=>array('User','Answer'=>array('User'),'Tag'));

$this->set('posts',$this->paginate());

そこから返されたものがlistFollowing()インデックス エラーの原因であることがわかります。その情報を使用してさらにデバッグできます。データベーススキーマ、完全なコード、この問題を引き起こす変数/状況などがないため、私はもはや助けることができません:)

于 2012-12-15T23:21:13.433 に答える