如何将 laravel eloquent 中的 int 转换为字符串?

How can I convert int to string in laravel eloquent?

我的 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();

但是不行

如果您想使用非常自定义的连接条件,例如涉及一个或两个列的转换,那么我不确定如果没有至少 some[=24,这是否可行=] 一种原始语法。因此,您应该考虑@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(和 select)子句中添加了 location.name
  • 使用另一个 DB::raw() 来处理连接条件中的转换

更简单地说,我们从初始查询开始,对于这种情况,我们在循环中创建 where 条件,根据我们添加的每个请求字段,另一个条件 ->where 被添加到查询中。

 $query = DB::table($type)->select('*'); //or $query = Model::select();
    if ($request) {
        foreach ($request->request as $key => $value) {
            $query = $query->where($key, $value);
        }
    }
    return $query->get();// or $query->get();

使用 $query->toSql() 来查询字符串...