【问题标题】:How to convert my MySQL query to Laravel Eloquent如何将我的 MySQL 查询转换为 Laravel Eloquent
【发布时间】:2017-11-06 20:39:09
【问题描述】:

如何将这个 MySQL 查询写到 Laravel 的 Eloquent 中?

SELECT
  products.pro_code               AS code,
  products.name               AS product,
  sum(ppurchases.quantity)    AS total_quantity,
  products.reorder_point      AS reorder_point,
  products.selling_price      AS selling_price,
  min(ppurchases.expiry_date) AS nearest_expiry
FROM `ppurchases`
  JOIN `products`
WHERE ppurchases.product_id = products.id
GROUP BY products.name

我正在写它,但无法成功。

$products = DB::table('products')
                ->JOIN('ppurchases','ppurchases.product_id', '=','products.id')
                ->select('products.pro_code as code','products.name as product','products.reorder_point as reorder_point','products.selling_price as selling_price',DB::raw('min(ppurchases.expiry_date) as nearest_expiry'))
                ->where('ppurchases.product_id','products.id')
                ->groupBy('products.name')
                ->get();

【问题讨论】:

标签: php mysql database laravel


【解决方案1】:

在使用 Raw 时使用每个前缀

$products = DB::table('products')
    ->join('ppurchases', 'ppurchases.product_id', '=', 'products.id')
    ->select(
        'products.name as product',
        DB::raw('min(per_ppurchases.expiry_date) as nearest_expiry')
    )
    ->groupBy('products.name')
    ->get();

【讨论】:

    【解决方案2】:

    编辑:更新到新的表名。

    由于默认的 Homestead sql_mode=only_full_group_by 标志,我收到了非聚合列错误。添加 2 加法 MAX(您可以替换为 MIN() 或 AVG() 似乎可以解决问题。

    $result = DB::table('per_ppurchases')
        ->join('per_products', 'per_ppurchases.product_id', '=', 'per_products.id')
        ->select(
            'per_products.name                       as code',
            'per_products.name                       as product',
            DB::raw('SUM(per_ppurchases.quantity)    as total_quantity'),
            DB::raw('MAX(per_products.reorder_point) as reorder_point'),
            DB::raw('MAX(per_products.selling_price) as selling_price'),
            DB::raw('MIN(per_ppurchases.expiry_date) as nearest_expiry')
        )
        ->groupBy('per_products.name')
        ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2017-03-10
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多