【问题标题】:Why is this function returning empty Data?为什么这个函数返回空数据?
【发布时间】:2019-04-23 20:17:20
【问题描述】:

我正在尝试将 PurchaseLine 表与 SellLine 合并以获得 售出数量 |购买数量 |库存余额

此查询无需加入 purchaselines 表即可工作。 使用 purchaselines 表返回正常,但数据为空

我认为我对 Where、WhereIn、Orwhere 子句有疑问?

请参阅下面的附件图片。为什么数据会是空的?

  if ($request->ajax()) {
            $variation_id = $request->get('variation_id', null);
            $query = TransactionSellLine::join(
                'transactions as t',
                'transaction_sell_lines.transaction_id',
                '=',
                't.id'
            )
                ->join(
                    'variations as v',
                    'transaction_sell_lines.variation_id',
                    '=',
                    'v.id'
                )
                ->join('product_variations as pv', 'v.product_variation_id', '=', 'pv.id')
                ->join('purchase_lines as pl', 'pl.transaction_id', '=', 't.id')
                ->join('products as p', 'pv.product_id', '=', 'p.id')
                ->join('users as z', 't.created_by', '=', 'z.id')
                ->leftjoin('units as u', 'p.unit_id', '=', 'u.id')
                ->where('t.business_id', $business_id)
                ->whereIn('t.type', ['sell', 'purchase', 'opening_stock'])
                ->orwhereIn('t.status', ['final', 'receieved'])
                ->select(
                    'p.name as product_name',
                    'z.username as username',
                    'p.enable_stock',
                    'p.type as product_type',
                    'pv.name as product_variation',
                    'v.name as variation_name',
                    't.id as transaction_id',
                    't.transaction_date as transaction_date',
                    'transaction_sell_lines.unit_price_before_discount as unit_price',
                    DB::raw('DATE_FORMAT(t.transaction_date, "%Y-%m-%d") as formated_date'),
                    DB::raw("(SELECT SUM(vld.qty_available) FROM variation_location_details as vld WHERE vld.variation_id=v.id $vld_str) as current_stock"),
                    DB::raw('SUM(transaction_sell_lines.quantity - transaction_sell_lines.quantity_returned) as total_qty_sold'),
                    'u.short_name as unit',
                    DB::raw('SUM(pl.quantity - pl.quantity_returned - pl.quantity_adjusted) as qty_purchased'),
                    DB::raw('SUM((transaction_sell_lines.quantity - transaction_sell_lines.quantity_returned) * transaction_sell_lines.unit_price_inc_tax) as subtotal')
                )
                ->groupBy('v.id')
                ->groupBy('pl.id')
                ->groupBy('formated_date');
 return Datatables::of($query)
 ->rawColumns(['qty_purchased','current_stock', 'subtotal', 'total_qty_sold'])
 ->make(true);

【问题讨论】:

  • 建议您将其重新标记为 mysql(或至少添加它),除非您有一组 Laravel 关系,您宁愿使用 Eloquent 而非相当原始的 sql 查询来提取这些关系。可能会有更多人关注它。
  • 代码图片对试图重现您的问题的人没有帮助。请粘贴文本。

标签: php mysql laravel


【解决方案1】:

我删除了购买线加入,因为它没有必要 这一行

  ->join('purchase_lines as pl', 'pl.transaction_id', '=', 't.id')

我应该使用产品 ID 而不是交易 ID 来查询采购线表

以下是有效的修改

DB::raw('(SELECT SUM(pl.quantity - pl.quantity_returned - pl.quantity_adjusted) FROM purchase_lines as pl WHERE pl.product_id=pv.id) as qty_purchased')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多