Yii2 - 活动记录查询在字符串字段中搜索数字
Yii2 - active record query search for a number in a string field
我的 table 中有一个包含 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();
此查询 returns 这些记录:
id json
----------------
1 [123,45,1]
2 [23,4,5]
这实际上不是一个错误的结果,但我想要的是 return 只有带有 id=2
的记录。我该怎么做?
等等 ['like','json','5']
或 ['like','json','4']
等等?数字相似,但我希望确切的数字匹配。
还有一个问题,我希望最后一个问题的答案在这部分有所改变['like','json',[4,5,6]]
。
换句话说,我想将一个数组传递给 like 运算符,它会自动为每个元素进行 OR 运算。有可能吗?如果不是,我如何在不执行多查询的情况下迭代数组并使用最后一个问题功能创建多个 Or_like 条件?
使用表达式使用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
我的 table 中有一个包含 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();
此查询 returns 这些记录:
id json
----------------
1 [123,45,1]
2 [23,4,5]
这实际上不是一个错误的结果,但我想要的是 return 只有带有 id=2
的记录。我该怎么做?
等等 ['like','json','5']
或 ['like','json','4']
等等?数字相似,但我希望确切的数字匹配。
还有一个问题,我希望最后一个问题的答案在这部分有所改变['like','json',[4,5,6]]
。
换句话说,我想将一个数组传递给 like 运算符,它会自动为每个元素进行 OR 运算。有可能吗?如果不是,我如何在不执行多查询的情况下迭代数组并使用最后一个问题功能创建多个 Or_like 条件?
使用表达式使用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