【问题标题】:How can I change "join with select statement results to" laravel eloquent?如何将“加入选择语句结果”更改为 laravel 雄辩?
【发布时间】:2019-01-08 12:13:43
【问题描述】:

我的查询是这样的:

SELECT 
* 
FROM
(SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1 
INNER JOIN
(SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
ON t1.ks = t2.ks

我想把它改成 laravel eloquent。我需要使用 laravel eloquent 的分页方法

我尝试这样:

$query =  \DB::select(\DB::raw("
    SELECT *
    FROM (
        SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
    ) t1 
    INNER JOIN (
        SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
    ) t2 ON t1.ks = t2.ks 
"));

我很困惑把paginate 方法。我需要它。因为我想在视图刀片 laravel 中显示分页

这样的脚本:{{ $results->appends(Request::query())->render() }}

我该怎么做?

【问题讨论】:

  • 如果您提供数据库架构、示例数据和预期结果,我怀疑可以简化查询,从而使用查询构建器和分页器更容易实现。
  • @fubar 看看这个:stackoverflow.com/questions/10538539/…。我的架构是这样的

标签: sql laravel eloquent laravel-5.6 pagination


【解决方案1】:

首先,根据您从中获取数据库架构的linked question,可以使用更简单的查询找到您尝试查询的数据。

我编写了以下用于 MySQL DBMS 的查询,因为您的问题和链接的问题都没有指定 DBMS 类型。

SELECT ks, COUNT(*) AS tasks, SUM(age < palt) AS late
FROM tasks
GROUP BY ks;

这是一个SQL Fiddle,其中包含演示查询有效的示例数据。

其次,可以使用 Laravel 查询构建器构建上述查询,如下所示。

$results = DB::table('tasks')
    ->selectRaw('ks, COUNT(*) AS tasks, SUM(age < palt) AS late')
    ->groupBy('ks')
    ->paginate(10);

【讨论】:

猜你喜欢
  • 2018-09-27
  • 2020-07-29
  • 1970-01-01
  • 2014-11-27
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多