Yii2 - 活动记录查询搜索字符串字段中的数字

时间:2017-04-07 07:31:19

标签: php mysql activerecord yii2-advanced-app

我有一个字符串字段,在我的表中包含一个json字符串。让我们命名为tbl_table

我们可以说它有3条记录:

id    json
----------------
1     [123,45,1]
2     [23,4,5]
3     [7,8,9]

现在我想获取在json字段中包含数字的记录(使用Yii2中的活动记录),所以:

$res = Table::find()->where(['like','json','23'])->all();

此查询返回以下记录:

id    json
----------------
1     [123,45,1]
2     [23,4,5]

这实际上并不是错误的结果,但我想要的只是返回id=2的记录。我怎么能这样做?

以及['like','json','5']['like','json','4']等等?数字相似,但我希望确切的数字匹配。

另一个问题我希望最后一个问题回答这个部分['like','json',[4,5,6]]的变化。 换句话说,我想将一个数组传递给like运算符,它会自动为每个元素进行OR运算。它有可能吗?如果不是,我如何迭代数组并使用最后一个问题功能制作多个Or_like条件而不执行多个查询?

1 个答案:

答案 0 :(得分:3)

使用表达式来使用mysql函数并使用JSON_CONTAINS函数

use yii\db\Expression;
$expression = new Expression('JSON_CONTAINS(fied, value)');
$now = (new \yii\db\Query)->select($expression);  

p.s json_contains从MySQL 5.7版本开始

引用https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html http://www.yiiframework.com/doc-2.0/yii-db-expression.html