2016-12-22 4 views
0

ich die folgende Tabelle haben, die durch eine Spalte mit Werten gespeichert hat durch ein Komma getrennt werden Das istyii2 Datensätze aus einer Datenbanktabelle Rückkehr

1,2,3,4,5 

So am Ende erreiche ich so etwas wie dieses

first row  1,2,3,4 
second row  2,3,5 
third row  1,4,5 

Die Zeilen haben ein Attribut Kategorie

So würde Ich mag alle Zeilen zurückgeben einen bestimmten Wert wie 1

mit

Das ist, was ich

public function actionChecklist($categoryval) //category is the integer value eg 1 
{ 

    $checklistitems= TblChecklist::find()->where(
     [ 
      "category"=>in_array("category",[$categoryval]) 
     ] 
    )->all(); 


    var_dump($checklistitems); 
    die(); 

} 

Der obige Code gibt immer leer versucht haben, wo ich falsch kann

Antwort

0

Sie LIKE vorgesehen verwenden werde, dass jede einzelne Kategorie von zwei Begrenzungszeichen in Ihrem Fall ist umgeben Kommas dh ,1,2,3,4,5, anstelle von 1,2,3,4,5. Ohne diese Kommas wird eine Suche nach say 1 alles mit einem 1 darin einschließlich Sachen wie 10,2,3 zurückgeben.

Ihre Suchparameter erfordert auch von diesen Kommas umgeben sein:

$checklistitems= TblChecklist::find() 
    ->where(["like", "category", ",".$categoryval.","]) 
    ->all(); 

Allerdings sollten Sie wahrscheinlich Ihre Tabelle denormalize durch eine Verknüpfungstabelle zwischen Checklisten und Kategorien zu schaffen. Sie sollten dann eine Beziehung zwischen Ihrem Prüflistenmodell und Ihrem Kategoriemodell erstellen. Der obige Code wird dann ungefähr so ​​aussehen:

$checklistitems= TblChecklist::find() 
    ->joinWith("categories") 
    ->where(["categories.id" => $categoryval]) 
    ->all(); 
Verwandte Themen