0

私はcakephp2.1を使用して、次のテーブル構造を含むアプリケーションを開発しています。

1. people(id, name)
2. movies(id, name)

と「人々」のhabtm映画は次のように表で示されています。

1. castsmovie(id, person_id, movie_id)
2. directorsmovie(id, person_id, movie_id)
3. moviesmusicdirector(id, person_id, movie_id)
4. moviesproducers(id, person_id, movie_id)
5. movieswriter(id, person_id, movie_id)
6. cinematographersmovie(id, person_id, movie_id)

特定の人のために映画をフェッチして、彼のために映画をページングしたいと思います。だから私が書いたコードはコントローラーにあります

$this->paginate = array('Person' => array(
        'contain' => array(
                'CastsMovie' => array('Movie'),
                'DirectorsMovie' => array('Movie'),
                'MoviesProducer' => array('Movie'),
                'MoviesMusicDirector' => array('Movie')),
                'MoviesWriter' => array('Movie'),
                'CinematographersMovie' => array('Movie')
        ),
        'conditions' => array('Person.id' => $id)));

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

    array(
(int) 0 => array(
    'Person' => array(
        'id' => '101',
        'name' => 'Darshan Thoogudeep',
    ),
    'CastsMovie' => array(
        (int) 0 => array(
            'id' => '53',
            'movie_id' => '14',
            'person_id' => '101',
            'order' => '1',
            'Movie' => array(
                'id' => '14',
                'name' => 'Krantiveera Sangolli Rayanna',
            )
        ),
        (int) 1 => array(
            'id' => '78',
            'movie_id' => '19',
            'person_id' => '101',
            'order' => '0',
            'Movie' => array(
                'id' => '19',
                'name' => 'Saarathi',
            )
        ),
        (int) 2 => array(
            'id' => '137',
            'movie_id' => '35',
            'person_id' => '101',
            'order' => '1',
            'Movie' => array(
                'id' => '35',
                'name' => 'BulBul',
            )
        ),
        (int) 3 => array(
            'id' => '153',
            'movie_id' => '42',
            'person_id' => '101',
            'order' => '0',
            'Movie' => array(
                'id' => '42',
                'name' => 'Viraat',
            )
        )
    ),
    'CinematographersMovie' => array(),
    'DirectorsMovie' => array(),
    'MoviesMusicDirector' => array(),
    'MoviesWriter' => array(),
    'MoviesProducer' => array()
)
 )

でも、20本までの極限の人の映画を全部撮りたいです。各ページの映画の限界を簡単にページングできるように。.解決策を手伝ってください。

4

1 に答える 1

1

HABTMテーブルが1つだけになるように、データモデルを変更することをお勧めします。

people_movies(id, person_id, movie_id,role_id) 

また、役割テーブルが必要になります。

role(id, role_name)

次に、それらをすべて同じテーブルに保存し、必要に応じて将来的にロールを追加できます。

このアプローチを使用すると、1人のすべての映画を取得するクエリがはるかに簡単になります。

于 2013-01-17T13:09:49.043 に答える