moh*_*jad 1 php mysql activerecord yii2-advanced-app
我的表中有一个字符串字段,其中包含 json 字符串。让我们命名为 tbl_table
假设它有这 3 条记录:
id json
----------------
1 [123,45,1]
2 [23,4,5]
3 [7,8,9]
Run Code Online (Sandbox Code Playgroud)
现在我想获取 json 字段中包含数字的记录(使用 Yii2 中的活动记录),所以:
$res = Table::find()->where(['like','json','23'])->all();
Run Code Online (Sandbox Code Playgroud)
此查询返回这些记录:
id json
----------------
1 [123,45,1]
2 [23,4,5]
Run Code Online (Sandbox Code Playgroud)
这实际上并不是一个错误的结果,但我想要的是只返回带有 的记录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);
Run Code Online (Sandbox Code Playgroud)
ps 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
| 归档时间: |
|
| 查看次数: |
3715 次 |
| 最近记录: |