2017-06-08 2 views
0

Ich benutze Yii2 und mit der yii\rbac\DbManager für auth Zuordnung.Auth Zuweisung Datenbank-Aufruf yii2

Ich war auf der Suche auf den Protokollen, um zu sehen, wo die alle Datenbankaufrufe aus und diese Abfrage in Folge

SELECT `b`.* FROM `auth_assignment` `a`, `auth_item` `b` WHERE 
((`a`.`item_name`=`b`.`name`) AND (`a`.`user_id`='91')) AND (`b`.`type`=1) 

Hält läuft immer wieder, manchmal 10/15 Zeiten kommen.

Ich habe

hinzugefügt
'authManager' => [ 
     'class' => 'yii\rbac\DbManager', 
     'cache' => 'cache' 
    ], 

Da die docs sagen, dass wird die Auth-Zuweisungen-Cache (I Memcached verwendet). Aber es scheint nicht zu funktionieren ...

Wer hat eine Idee? Entweder wie man es zwischenspeichert oder warum es so oft aufgerufen wird?

Prost

+0

die Anwendungskomponente ID für den Cache korrekt ist (zweite Prüfung, die Sie wirklich es als "Cache") Stellen Sie sicher. Beachten Sie außerdem, dass die Cache-Funktion für yii \ rbac \ DbManager seit Version 2.0.3 verfügbar ist. Überprüfen Sie Ihre Yii2-Version. – dataskills

Antwort

0

https://github.com/yiisoft/yii2/issues/3168

Nur Cache auth_item, auth_rule und auth_item_child Daten. Alle diese Daten werden als einzelner Eintrag im Cache zwischengespeichert. Beachten Sie, dass zu groß ist, um zwischengespeichert zu werden (Stellen Sie sich ein System mit Millionen von Benutzern vor).

0

hinzufügen Caching in Verkäufer/yiisoft/yii2/rbac/DbManager.php (auch in allen Orten, die Sie Caching benötigen)

dieser Code:

$ ALL_DATA = $ this-> db -> cache (Funktion ($ db) use ($ query) { Rückgabe $ query-> all ($ db); }, 360);


public function getAssignments($userId) 
    { 
     if (empty($userId)) { 
      return []; 
     } 

     $query = (new Query) 
      ->from($this->assignmentTable) 
      ->where(['user_id' => (string) $userId]); 


     $all_data = $this->db->cache(function ($db) use ($query) { 
        return $query->all($db); 
        },360); 


     $assignments = []; 
     foreach ($all_data as $row) { 
      $assignments[$row['item_name']] = new Assignment([ 
       'userId' => $row['user_id'], 
       'roleName' => $row['item_name'], 
       'createdAt' => $row['created_at'], 
      ]); 
     } 

     return $assignments; 
    } 
Verwandte Themen