【问题标题】:Perform query on a calculated column using Laravel使用 Laravel 对计算列执行查询
【发布时间】:2017-06-14 17:39:12
【问题描述】:

我想使用 Laravel 的 Eloquent 模型在 PHP 中执行以下 SQL 语句:

SELECT *, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat )))) AS distance
FROM example_retailers
HAVING distance < 1000
ORDER BY distance
OFFSET 4
LIMIT 3;

我正在努力将其转换为 Laravel 的 Eloquent 模型(主要是计算列)。

这是我目前所拥有的:

ExampleRetailer::
    // TODO: add calculated row
    where('distance', '<', 100)
    ->orderBy('distance')
    ->skip(4)
    ->limit(3)
    ->get();

【问题讨论】:

标签: mysql laravel laravel-5 eloquent


【解决方案1】:

如果只是使用 SQL 创建一个新行:

SELECT *, CASE WHEN (3959 * acos(cos(radians(37))
                          * cos(radians(lat))
                          * cos(radians(lng) - radians(-122))
                          + sin(radians(37))
                          * sin(radians(lat )))) < 100 THEN END AS NewRow
FROM example_retailers

【讨论】:

  • 即使在 Laravel 中也没有
【解决方案2】:

您可以使用原始查询 (source)

DB::table('example_retailers')
->select(DB::raw('*, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat )))) AS distance'))
->having('distance', '<', 100)
->orderBy('distance')
->skip(4)
->limit(3)
->get();

【讨论】:

  • 运行时出现错误:unknown column 'distance'
  • 你犯了一个小错误。应该是having,而不是where
  • 如何使用 eloquent 类?我更新了问题以使这一点更清楚。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2018-10-03
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多