【问题标题】:How can I convert int to string in laravel eloquent?如何在 laravel eloquent 中将 int 转换为字符串?
【发布时间】:2017-10-06 03:34:37
【问题描述】:

我的mysql查询是这样的:

SELECT b.id, b.name, COUNT(*) AS count_store
FROM stores a
JOIN locations b ON CONVERT(b.id,CHAR) = a.address->'$."regency_id"'
GROUP BY b.id
ORDER BY count_store DESC
LIMIT 10 

如果我使用 mysql 查询:CONVERT(b.id,CHAR) 将 int 转换为字符串

如何在 laravel eloquent 中将 int 转换为字符串?我正在使用 Laravel 5.3。

我试过这样:

$stores = Store::select('locations.name','COUNT(*) AS count_store')
               ->join('locations', 'locations.id', '=', 'stores.address->regency_id')
               ->groupBy('locations.id')
               ->orderBy('count_store', 'desc')
               ->limit(10)
               ->get();

但它不起作用

【问题讨论】:

  • 你尝试了什么?你能包含你的 Laravel 代码吗?
  • 您想将此查询转换为 Eloquent 查询还是将该字段输出为字符串?
  • @Tim Biegeleisen,我更新了我的问题
  • @Jerodev,我想转换成雄辩的。看我的问题。我已经更新了

标签: php mysql laravel type-conversion laravel-eloquent


【解决方案1】:

如果您想使用非常自定义的连接条件,例如涉及一个或两个列的强制转换,那么我不确定如果没有至少 某种 种原始连接条件,这是否可行句法。因此,您应该考虑@Rodrane 给出的答案以及这个答案:

$stores = Store::select('locations.id', 'locations.name', DB::raw('COUNT(*) AS count_store'))
               ->join('locations', DB::raw("CONVERT(locations.id, CHAR)"), '=', 'stores.address->regency_id')
               ->groupBy('locations.id', 'locations.name')
               ->orderBy('count_store', 'desc')
               ->limit(10)
               ->get();

请注意,我做了以下更改:

  • 使用DB::raw() 为计数提供自定义别名
  • GROUP BY(和选择)子句中添加了location.name
  • 使用另一个 DB::raw() 处理连接条件中的转换

【讨论】:

  • @BenOfTheNorth 我同意了你的建议,但我在任何地方都找不到这种语法的例子。如果您有链接,将不胜感激。
  • 哈我删除了你更新的评论——我每天都在使用它,它的语法是正确的——看看laravel.com/docs/5.4/queries,你会看到一些 DB::Raw 的使用示例作为常规参数的替代品。
  • 啊哈......但文档实际上并未显示使用 DB::raw() 作为连接参数,但它仍然有效。他们应该更新他们的文档,这似乎意味着对更复杂的连接使用单独的闭包。
  • @Tim Biegeleisen,存在错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'COUNT(*)' in 'field list
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 2011-04-28
  • 2015-01-29
相关资源
最近更新 更多