ホームページ > データベース > mysql チュートリアル > Find メソッドを使用して CakePHP でテーブルを効率的に結合するにはどうすればよいですか?

Find メソッドを使用して CakePHP でテーブルを効率的に結合するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-29 19:52:15
オリジナル
885 人が閲覧しました

How to Efficiently Join Tables in CakePHP using the Find Method?

CakePHP の Find メソッドを使用したテーブルの結合

CakePHP の find メソッドを使用して複数のテーブルからデータを取得するには、次のオプションを検討してください。

スタンダードケーキPHP方法

actAs および hasMany またはbelongsTo プロパティを使用してモデル間の関係を確立します。例:

class User extends AppModel {
    public $actsAs = ['Containable'];
    public $hasMany = ['Message'];
}

class Message extends AppModel {
    public $actsAs = ['Containable'];
    public $belongsTo = ['User'];
}
ログイン後にコピー

次に、包含可能な動作を使用します:

$this->Message->find('all', [
    'contain' => ['User'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);
ログイン後にコピー

カスタム結合

検索メソッド内でカスタム結合を定義します。 :

$this->Message->find('all', [
    'joins' => [
        [
            'table' => 'users',
            'alias' => 'UserJoin',
            'type' => 'INNER',
            'conditions' => ['UserJoin.id = Message.from']
        ]
    ],
    'conditions' => ['Message.to' => 4],
    'fields' => ['UserJoin.*', 'Message.*'],
    'order' => 'Message.datetime DESC'
]);
ログイン後にコピー

2 つの関係を使用して、同じモデル

同じモデルへの 2 つの関係に基づいてデータを取得するには、モデルを変更し、包含可能な動作を使用します:

class User extends AppModel {
    public $actsAs = ['Containable'];
    public $hasMany = ['MessagesSent' => ['className' => 'Message', 'foreignKey' => 'from']];
    public $belongsTo = ['MessagesReceived' => ['className' => 'Message', 'foreignKey' => 'to']];
}

class Message extends AppModel {
    public $actsAs = ['Containable'];
    public $belongsTo = ['UserFrom' => ['className' => 'User', 'foreignKey' => 'from']];
    public $hasMany = ['UserTo' => ['className' => 'User', 'foreignKey' => 'to']];
}
ログイン後にコピー

検索呼び出し:

$this->Message->find('all', [
    'contain' => ['UserFrom'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);
ログイン後にコピー

以上がFind メソッドを使用して CakePHP でテーブルを効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート