【问题标题】:Laravel json column query to check if object existsLaravel json 列查询以检查对象是否存在
【发布时间】:2017-12-07 00:37:04
【问题描述】:

所以我在表companies 中有一个名为settings 的json 列(它有一个名为Company 的Laravel 模型)。该列可能包含也可能不包含名为business_key 的对象。我尝试仅返回包含此对象的公司。 我的查询如下所示:

$owners = \Company::where('settings->business_key')->get();

我不知道如何制作这样的作品。我没有找到任何专门针对此的 Laravel。 感谢您的时间和帮助!

【问题讨论】:

  • 如果该列没有默认值,则在没有业务键的情况下为空。所以,检索所有非空业务键的列

标签: json laravel


【解决方案1】:

假设您将字段转换为模型中的数组,您可以将其视为其他 larval 字段,因此您的查询将是:

$owners = \Company::whereNotNull('settings->business_key')->get();

【讨论】:

  • 嘿,我也有一个问题,在我的情况下,我有一个 JSON 角色数组,如 ["user", "admin", "customer"] 在这种情况下如何执行 where 子句如果用户是管理员?
  • 所以我想通了,一个简单的 Model::whereJsonContains["roles", "user"] 修复了它...耶!
【解决方案2】:

试试这个,

$data = \Company::whereNotNull('setting')->get();

如果setting 列不包含对象,则值为NULL,那么上面的查询给出了setting 列中包含对象的所有记录。请参阅文档here

【讨论】:

    【解决方案3】:

    为了检索所有非空数据,你可以试试这个:

    $owners = \Company::whereRaw('JSON_EXTRACT(settings, "$.business_key") <> CAST("null" AS JSON)')->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 2017-02-14
      相关资源
      最近更新 更多