Heim > php教程 > php手册 > Hauptteil

Zusammenfassung der Methoden zum Abfragen verwandter Tabellen in Cakephp

黄舟
Freigeben: 2016-12-20 09:35:07
Original
2033 Leute haben es durchsucht

Wir können die folgenden Methoden verwenden, um

{Alle Informationen abzufragen, die das Schlüsselwort Schlüsselwort in der Notiz des angegebenen Benutzers enthalten🎜>

1. SQL-Anweisung

SELECT * FROM Users AS User
LEFT JOIN Notes AS Note ON User.id = Note.user_id
WHERE
User.id = {$user_id}
AND
Note.subject LIKE '%{keyword}%'
Nach dem Login kopieren
Dann führen wir diese SQL-Anweisung aus und verwenden die Abfragemethode des Modells

$data = $this->User->query($sql);
Nach dem Login kopieren
2. Verwenden Sie die Methoden bindModel() und unbindModel() des Modells

Anweisungen zu diesen beiden Methoden finden Sie unter Bitte beachten Sie


http://api.cakephp.org/class/model

Unser Ansatz ist

//重新绑定关联指定查询条件
 
$this->User->unbindModel('Note');
$this->User->bindModel(
    'hasMany' => array(
        'Note' => array(
            'conditions' => array(
                'Note.subject LIKE' => '%'.$keyword.'%'
            )
        )
    )
);
 
//指定主表条件获取数据
$data = $this->User->find('all',array(
    'conditions' => array(
        'User.id' => $user_id
    )
));
 
//或者
 
$data = $this->User->read(null,$user_id);
Nach dem Login kopieren
3 . Mit dem Kernverhalten (Behavior) Containable von Cakephp erstellen wir zunächst unsere eigene AppModel-Klasse und erstellen die Datei /app/app_model.php

Dann können wir sie im Controller übergeben So kann die Codeabfrage

class AppModel extends Model {
 
    //加载核心行为
    var $actsAs = array('Containable');
 
}
Nach dem Login kopieren

auch direkt in die Find-Anweisung geschrieben werden, ähnlich wie folgt:

$this->User->contain('Note.subject LIKE' => '%'.$keyword.'%');
 
$data = $this->User->find('all',array(
    'conditions' => array(
        'User.id' => $user_id
    )
));
Nach dem Login kopieren

Hinweis:

$data = $this->User->find('all',array(
    'conditions' => array(
        'User.id' => $user_id
    ),
    'contain' => array(
        'Note' => array(
            'conditions' => array(
                'Note.subject LIKE' => '%'.$keyword.'%'
            )
        )
    )
));
Nach dem Login kopieren
Wenn Sie eine Abfrage durchführen möchten {User.name oder Note.subject enthält alle Datensätze des Schlüsselworts keyword

Derzeit kann die Suchmethode von Cakephp diese Abfrage nicht implementieren und die oben eingeführte benutzerdefinierte SQL-Anweisung muss wie folgt verwendet werden:

Das Obige ist eine Zusammenfassung der Methode zum Abfragen von Assoziationstabellen in Cakephp. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com).

SELECT *
FROM users AS User
LEFT JOIN notes AS Note ON User.id = Note.user_id
WHERE
User.name LIKE '%keyword%'
OR
Note.subject LIKE '%keyword%'
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage