我有下表,其中一列的值由逗号分隔保存 那是
1,2,3,4,5
所以最后我实现了这样的目标
first row 1,2,3,4
second row 2,3,5
third row 1,4,5
行具有属性类别
所以我想返回所有具有特定值的行,如1
这就是我试过的
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();
}
上面的代码总是在我出错的地方返回空白
答案 0 :(得分:0)
您可以使用LIKE
,前提是您的案例逗号中的每个类别都被两个分隔符包围,即,1,2,3,4,5,
而不是1,2,3,4,5
。如果没有这些逗号,搜索说1
将返回包含1
内容的10,2,3
的所有内容。
您的搜索参数也需要包含这些逗号:
$checklistitems= TblChecklist::find()
->where(["like", "category", ",".$categoryval.","])
->all();
但是,您应该通过在清单和类别之间创建联结表来对表进行非规范化。然后,您应该在清单模型和类别模型之间创建关系。上面的代码看起来像是:
$checklistitems= TblChecklist::find()
->joinWith("categories")
->where(["categories.id" => $categoryval])
->all();