Wie rufe ich Daten aus mehreren Tabellen mithilfe der Suchmethode von CakePHP mit JOIN ab?

Mary-Kate Olsen
Freigeben: 2024-10-17 22:34:02
Original
359 Leute haben es durchsucht

How to Retrieve Data from Multiple Tables Using CakePHP\'s find Method with JOIN?

Retrieve Data from Multiple Tables Using CakePHP's find Method with JOIN

To execute the specified SQL query using CakePHP's find method, you can employ two approaches:

Method 1: CakePHP Standard Approach

  1. Establish relationships between your models:
<code class="php">class User extends AppModel {
    public $actsAs = array('Containable');
    public $hasMany = array('Message');
}

class Message extends AppModel {
    public $actsAs = array('Containable');
    public $belongsTo = array('User');
}</code>
Nach dem Login kopieren
  1. Define relationships properly:
  2. Rename messages.from column to messages.user_id for auto-association.
  3. Execute the query:
<code class="php">$this->Message->find('all', array(
    'contain' =&gt; array('User')
    'conditions' =&gt; array(
        'Message.to' =&gt; 4
    ),
    'order' =&gt; 'Message.datetime DESC'
));</code>
Nach dem Login kopieren

Method 2: Custom Join

  1. Define custom join parameters:
<code class="php">$this->Message->find('all', array(
    'joins' =&gt; array(
        array(
            'table' =&gt; 'users',
            'alias' =&gt; 'UserJoin',
            'type' =&gt; 'INNER',
            'conditions' =&gt; array(
                'UserJoin.id = Message.from'
            )
        )
    ),
    'conditions' =&gt; array(
        'Message.to' =&gt; 4
    ),
    'fields' =&gt; array('UserJoin.*', 'Message.*'),
    'order' =&gt; 'Message.datetime DESC'
));</code>
Nach dem Login kopieren

Using Multiple Relationships to the Same Model

You can establish two relationships to the same model:

<code class="php">class User extends AppModel {
    public $actsAs = array('Containable');
    public $hasMany = array(
        'MessagesSent' =&gt; array(
            'className'  =&gt; 'Message',
            'foreignKey' =&gt; 'from'
         )
    );
    public $belongsTo = array(
        'MessagesReceived' =&gt; array(
            'className'  =&gt; 'Message',
            'foreignKey' =&gt; 'to'
         )
    );
}

class Message extends AppModel {
    public $actsAs = array('Containable');
    public $belongsTo = array(
        'UserFrom' =&gt; array(
            'className'  =&gt; 'User',
            'foreignKey' =&gt; 'from'
        )
    );
    public $hasMany = array(
        'UserTo' =&gt; array(
            'className'  =&gt; 'User',
            'foreignKey' =&gt; 'to'
        )
    );
}</code>
Nach dem Login kopieren

Example query:

<code class="php">$this->Message->find('all', array(
    'contain' =&gt; array('UserFrom')
    'conditions' =&gt; array(
        'Message.to' =&gt; 4
    ),
    'order' =&gt; 'Message.datetime DESC'
));</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich Daten aus mehreren Tabellen mithilfe der Suchmethode von CakePHP mit JOIN ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage