【问题标题】:Laravel From Raw DB to EloquentLaravel 从 Raw DB 到 Eloquent
【发布时间】:2015-03-26 21:58:58
【问题描述】:

我正在尝试将我的 laravel 原始查询更改为 eloquent,因为现在我已经掌握了一些 eloquent 的基础知识,并且我尝试在 laravel 中制作博客。 但是一些复杂性保持不变。

首先:这是我的原始 SQL:

select group_concat(DISTINCT q.sku SEPARATOR ", ") as sku, `sales_flat_order`.`status`, `sales_flat_order`.`increment_id`, `sales_flat_order`.`shipping_description`, `sales_flat_order`.`subtotal`, `sales_flat_order`.`customer_email`, `d`.`country_id`, `d`.`region`, `d`.`city`, `d`.`postcode`, group_concat(DISTINCT q.name SEPARATOR ", ") as name, concat(sales_flat_order.created_at) AS created_at from `sales_flat_order` left join `sales_flat_order_item` as `q` on `sales_flat_order`.`entity_id` = `q`.`order_id` left join `sales_flat_order_address` as `d` on `d`.`parent_id` = `sales_flat_order`.`entity_id` group by `sales_flat_order`.`increment_id` order by `sales_flat_order`.`increment_id` asc

我在 Laravel 中的原始查询:

SalesFlatOrder::leftJoin('sales_flat_order_item as q','sales_flat_order.entity_id', '=','q.order_id')
                        ->leftJoin('sales_flat_order_address as d', 'd.parent_id', '=', 'sales_flat_order.entity_id')
                        ->select((array(DB::Raw('group_concat(DISTINCT q.sku SEPARATOR ", ") as sku'),'sales_flat_order.status','sales_flat_order.increment_id', 'sales_flat_order.shipping_description','sales_flat_order.subtotal','sales_flat_order.customer_email','d.country_id', 'd.region', 'd.city','d.postcode',DB::raw('group_concat(DISTINCT q.name SEPARATOR ", ") as name'),DB::raw('concat(sales_flat_order.created_at) AS created_at'))))
                        ->groupBy('sales_flat_order.increment_id')
                        ->orderBy('sales_flat_order.increment_id')
                        ->paginate(10);

现在我正在尝试将整个原始查询更改为雄辩的。我已经做了模型。因此,以下是我在控制器中的雄辩查询。

public function detailed(){
$sales = SalesFlatOrder::with('address')->groupBy('increment_id')->orderBy('increment_id')->paginate(10);

return View::make('detailed')->with('sales', $sales);
}

我的问题:1: 我确实有 group concat (Distinct q.sku) 。那么如何用雄辩的方式做到这一点。因为有时您需要按日期分组。或按订单分组。那么如何在 sku 列中显示不同的数据。那么如何将这个完整的原始查询转换为我们有 group_concat 的 Eloqeunt,对于这么多 DB 列是不同的

【问题讨论】:

  • Eloquent 不能帮你转换你的聚合 sql 函数。你的前进方式很好。

标签: php mysql laravel-4 eloquent


【解决方案1】:

您可以使用模型关系、Eloquent DB 表命名约定(无需在模型中指定表名)、路由数据绑定 crom DB 和范围从 RAW 转移到 Eloquent 优雅查询。​​

但是,有时您仍需要使用一些 RAW 来帮助自己进行更复杂的操作。

【讨论】:

    【解决方案2】:

    首先创建一个自定义集合:

    $customCollection = new \Illuminate\Database\Eloquent\Collection;
    

    然后,你可以这样做:

    $user =new User;
    $user->setRawAttributes((array) $userRawData);
    $customCollection->add($user);
    

    问候!

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 1970-01-01
      • 2019-01-10
      • 2015-04-28
      • 2018-07-06
      • 2016-07-29
      • 2017-06-14
      • 2019-08-20
      • 2014-12-05
      相关资源
      最近更新 更多