0

CakePHP との 2 つのモデル関係を通じてデータを取得しようとしています。モデルとその関連付けは次のとおりです。

User hasOne Profile HABTM Skill

find()User モデルで操作を行うと、ユーザーのスキルが返されるようにしたいのですが、現在返されていません。Userモデルに対して実行されている私の検索呼び出しは次のとおりです。

$this->paginate = array(
    'conditions' => array(
        'OR' => array(
            'Profile.firstname LIKE' => "%$q%",
            'Profile.lastname LIKE' => "%$q%"
        )
    )
);

ユーザー データとプロファイル データは返されますが、スキル データは返されません。またはに設定しようとしrecursiveましたが、どちらも役に立ちません。スキル データを取得できる唯一の方法は、モデルに対して実行することですが、それはできません。明確にするために、関連するモデルとその関係を次に示します。23find()Profile

// app/Model/User.php
class User extends AppModel {
    public $hasOne = 'Profile';
}

// app/Model/Profile.php
class Profile extends AppModel {
    public $belongsTo = 'User';
    public $hasAndBelongsToMany = 'Skill';

// app/Model/Skill.php
class Skill extends AppModel {
    public $hasAndBelongsToMany = 'Profile';

ユーザーデータを取得する際に、ユーザーのスキルを習得するのを手伝ってくれる人はいますか? ありがとう。

4

1 に答える 1

1

CakePHP の Containable Behaviorを使用します。検索結果は次のようになります。

$this->User->find('all',array(
    'conditions' => array(
        'OR' => array(
            'Profile.firstname LIKE' => "%$q%",
            'Profile.lastname LIKE' => "%$q%"
        )
    ),
    'contain' => array(
        'Profile' => array(
            'Skill'
        )
    )
));

はるかにシンプルで読みやすく、出来上がりです。恐ろしい「再帰」を使用する必要なく、必要なデータを取得できます。

于 2013-04-06T23:55:03.427 に答える