2016-06-27 7 views
0

Ich habe 2 Tabellen (Benutzer und Technologien) und ich muss Daten von ihnen beide separat in einem 3. Controller abrufen.Mehrere Daten abrufen CakePHP 3

Ich kann das mit loadmodel tun und find() und dann die Daten über $ this-> set() anzeigen, aber dadurch wird die Website sehr langsam> 70s und wenn ich nur eins suche, funktioniert es schnell.

Also im Grunde muß ich meine Abfrage zu optimieren und zu beschleunigen meine DB

hier ist mein Code.

$users = $this->loadModel('Users'); 


    $datas=$users->find('all')->select(['id','phone', 'first_name','last_name','birthday','email','website', 'address', 'resume', 'cv_url'])->where(['id' => 1])->bufferResults(false)->ToArray(); 


    $technologies = $this->loadModel('Technologies'); 
    $technologies=$technologies->find('all')->select(['id', 'name', 'slug', 'image', 'exp', 'exp_perc'])->bufferResults(false)->ToArray(); 

    $this->set(compact('datas','technologies')); 

Einige DebugKit Bilder enter image description here enter image description here

wie Sie sehen können, ich habe nur zwei Abfragen aber im Debug es zeigt, 10 und TABLE_SCHEMA nahm 35322ms und sein genanntes 2 Mal (35322 * 2)

Jeder Vorschlag ist willkommen.

+1

Ich würde vorschlagen, dass Sie mehr Informationen zu Ihrer Frage hinzufügen, wie es aussieht, werden Sie wahrscheinlich nicht viel Hilfe bekommen, da es sich um ein nicht reproduzierbares Problem handelt. Wie, welches DBMS benutzt du? Wie sehen die resultierenden Abfragen aus? Wie viele Datensätze werden abgerufen? Wo genau wird die Zeit verbracht (benutze einen Profiler, um das herauszufinden)? etc ... – ndm

Antwort

0

Anstatt das Modell zu laden und eine Auswahlabfrage zu erstellen (wodurch sich die Abfragezeit erhöht), sollten Sie 10 verwenden.

Zum Beispiel sollten Sie $usersTable = TableRegistry::get('Users'); statt $users = $this->loadModel('Users'); verwenden und danach können Sie Ihre Daten mit $query = $usersTable->find('all')->..... und wiederholen Sie die Zeilen der Abfrage mit foreach($query as $row) abfragen.

Es sollte schneller sein, wenn man bedenkt, dass es nicht Ihr ganzes "Benutzer" -Modell lädt und nur die UsersTable verwendet, die Sie einfach mit cakePHP-Abfragen bedienen können.

Im Folgenden einige Detailinfo: http://book.cakephp.org/3.0/en/orm/table-objects.html#getting-instances-of-a-table-class

Ich hoffe, es hilft! ;)

+0

Ich habe das schon probiert, das Problem ist, dass ich direkt an einem Server arbeite. und mit dem Debug-Modus dauert es eine Menge Zeit, um die Abfrage auszuführen. Ich habe es auf localhost versucht und es funktioniert gut, auch wenn der Debug-Modus auf wahr gesetzt ist. –