laravel:JSON 字段与数组的比较

Are*_*eza 4 php mysql laravel laravel-query-builder

laravel-5.7/mysql\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的数据库中,我有一个如下所示的 json 格式字段:

\n\n

字段名称:特征

\n\n
[\n    {"id": 1, "url": null, "name": "A"}, \n    {"id": 2, "url": null, "name": "B"}\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

同样在它的模型中,我写了这个

\n\n
  protected $casts = [\n    \'features\' => \'array\'\n  ];\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我创建一个数组:

\n\n
$features = array();\n\ntemp = array();\ntemp[\'id\'] = 1;\ntemp[\'url\'] = null;\ntemp[\'name\'] = A;\n$features[] = temp;\n\ntemp = array();\ntemp[\'id\'] = 2;\ntemp[\'url\'] = null;\ntemp[\'name\'] = B;\n$features[] = temp;\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何$features arrayfeatures field 数据库中的进行比较?

\n\n

\xd9\x91我检查了这些:

\n\n
$fff = \\App\\Cart::whereFeatures($features)->get()->first();\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
$fff = \\App\\Cart::whereFeatures(json_encode($features))->get()->first();\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
$fff = \\App\\Cart::whereFeatures(json_encode($features,JSON_UNESCAPED_UNICODE))->get()->first();\n
Run Code Online (Sandbox Code Playgroud)\n

Jon*_*eir 7

使用原始表达式来转换比较值:

$fff = \App\Cart::whereRaw('features = cast(? as json)', json_encode($features))->get();
Run Code Online (Sandbox Code Playgroud)