【问题标题】:Laravel: retrieve count of value in JSON arrayLaravel:检索JSON数组中的值计数
【发布时间】:2017-11-14 09:32:18
【问题描述】:

Iv 目前接管了一个项目,其中开发人员在某些表的 json 数组列中存储了 has many 关系。

产品表

----------------------------
id | product | colour
----------------------------
 1   iPhone    ["8","4","1"]
 2   iPad      ["8","1"]
 3   Macbook   ["8"]

这是存储在产品和可用产品颜色之间的关系的示例。

我需要能够获得与特定颜色相关的产品数量。 所以在这个例子中...colour: 8 将返回 3 products

我习惯于使用 $product->colours() 的 Eloquent 关系,但不幸的是,在这种情况下我不能这样做,而且我无法更改当前的数据库结构。

如何使用雄辩的 where 或 whereIn 子句获得每种颜色的产品数量?

到目前为止我已经尝试过什么......

$count = $products->where('colour', '[$colour->id]')->count();
----
$count = $products->whereIn('colour', $colour->id)->count();

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 我希望你解雇了搞乱“关系”的“开发者”
  • $count = $products->where('color', $colour->id)->count(); ?
  • @Amarnasan 当我看到数据库时,我差点心脏病发作,没有用于 hasMany 关系的数据透视表。
  • @JérémyCasper 我已经尝试过了,返回一个空数组
  • 我认为这个开发者错过了雄辩关系的全部意义

标签: laravel laravel-5.4


【解决方案1】:

这很难看,但我想它可以工作:

\App\Product::where('colour','like','%"' .$colour->id '"%')->distinct()->count()

【讨论】:

  • 这将返回 8, 18, 228,... for query='8'。使用colors 表进行标准化是必须的。最终是 json 字段而不是字符串。
  • @Tpojka 不,它不会....因为颜色代码周围有双引号。在咆哮之前阅读。
  • 什么会返回%8%
  • @Tpojka 什么会返回 %"8"% ?还是不明白?
猜你喜欢
  • 2018-06-21
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多