【问题标题】:Eloquent - SQLite query nested value in json columnEloquent - SQLite 查询 json 列中的嵌套值
【发布时间】:2020-08-04 01:13:20
【问题描述】:

在使用 json 列时,我的测试环境出现问题。

在我的测试中,我使用了一个 SQLite 数据库,并且我意识到在访问 json 列时我的查询失败了......我不知道如何面对它。我正在运行最新版本的 Homestead。

我的问题是:

我有一个带有 settings json 列的 User 模型,其中存储了一个名为 ma​​iling 的布尔值,因此,如果我想查询所有具有 mailing true 的用户,我可以写:

User::where('settings->mailing', true)->count();

然后,这会引发一个错误:

SQLSTATE[HY000]: General error: 1 no such column: true (SQL: select count(*) as aggregate from "users" where json_extract("settings", '$."mailing"') = true)

在我使用 MySQL 的本地环境中,它工作正常,那么,SQLite 和 json 列查询是否存在问题?

另一个提示:当使用whereNull()whereNotNull() 时,它在两种环境中也都能正常工作。

谢谢!

【问题讨论】:

标签: json laravel sqlite eloquent


【解决方案1】:

您需要将其用作字符串:

User::where('settings->mailing', 'true')->count();

是的,对 sqlLite have a look 有一些限制

【讨论】:

  • 根据 laravel 5.7 支持目前,这包括 MySQL 5.7、PostgreSQL、SQL Server 2016 和 SQLite 3.9.0(带有 JSON1 扩展名)。
  • 感谢您的回复。使用字符串可以解决错误,但如果保存为布尔值$user->forceFill(['settings->mailing' => true])->save(),它仍然不会查询。它返回我 0 个用户...
  • 你用的是哪个版本的 laravel??
  • 我使用的是最新版本,正好是 7.5.2
  • 您是否浏览过我在回答中提供的链接,以确保您的版本支持。
猜你喜欢
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多