2016-05-03 18 views
0

Anschluss an diese:PHP, Yii2 Gridview-Filterung auf Relationalwert php Entity-Relationship-yii2

Yii2 wie funktioniert search() in SearchModel arbeiten?

Ich möchte in der Lage sein, eine GridView Spalte von relationalen Daten zu filtern. Das ist was ich meine:

Ich habe zwei Tabellen, TableA und ``. Beide haben corrTableBesponding-Modelle, die mit Gii generiert wurden. TableA hat einen Fremdschlüssel auf einen Wert in TableB, wie folgt aus:

TableA 
attrA1, attrA2, attrA3, attrA4(TableB.attrB1) 

TableB 
attrB1, attrB2, attrB3 

Joining table A & B : TableC 
attrC1, attrC2, attrA4 

attrA1 und attrB1 sind die Primärschlüssel der entsprechenden Tabellen.

Jetzt habe ich eine Yii2 GridView von attrA2, attrA3 und attrB2. Ich habe einen funktionierenden Filter auf attr2 und attr3, damit ich nach Spaltenwerten suchen kann. Ich habe auch eine Arbeitssortierung für diese zwei Spalten - indem ich einfach auf die Spaltenüberschrift klicke. Ich möchte diese Filterung und Sortierung auch auf attrB2 hinzufügen können.

+0

Fügen Sie bitte echten Code hinzu und klären Sie, was genau im Ergebnis angezeigt werden soll. – StalkAlex

+0

Dies könnte nützlich sein http://stackoverflow.com/questions/34916480/how-to-search-filter-multipe-relation-table-and-groupping-in-yii2 – scaisEdge

Antwort

0

Erstens: In index.php in 'Spalten' entfernen attrA4 und fügen Sie diese Recherche zu bekommen:

[ 
    'attribute'=>'TableB', 
    'value'=>'TableB0.attrB2', // this is get function from TableA model class     
    ], 

Zweitens: In TableASearch Klasse von Regeln remove() Funktion attrA4, die unter ‚integer ist 'und füge dieses in das zweite Array genau dort unter' safe 'ein.

Drittens: In TableASearch Klasse Suchfunktion add:

$query->joinWith('TableB0'); 

Weiter ab: $ query-> andFilterWhere ([... entfernen Parameter:

'attrA4' => $this->attrA4, 

und in der zweiten $ hinzufügen query-> andFilterWhere ([add Parameter am Ende:

->andFilterWhere(['like', 'TableB.attrB2', $this->attrA4]); 

Sie haben gute grundlegende Dinge auf DoingTEasyChannel auf youtube.

Viel Glück!