【问题标题】:laravel passing multiple variables from different queries to a viewlaravel 将来自不同查询的多个变量传递给视图
【发布时间】:2017-01-22 20:30:41
【问题描述】:

我有不同的查询要在不同的时间段内选择。 我想将它们传递给视图

$sales = DB::table('sales')
        ->join('drugs', 'drugs.id', '=', 'sales.drug_id')
        ->select('sales.*','drugs.name', DB::raw('sum(sales.quantity_sold) as total_sales'))
        ->whereYear('date_sold','>','2014')
        ->whereYear('date_sold','<','2017')            
        ->get()->groupBy('sales.drug_id');

$stocks = DB::table('sales')
         ->join('drugs', 'drugs.id', '=', 'sales.drug_id')
         ->select('sales.*','drugs.name', DB::raw ('AVG(sales.quantity_sold) as average_sales'))
         ->whereMonth('date_sold','=', Carbon::today()->month)             
         ->get()->groupBy('sales.drug_id');

$data = $sales->merge($stocks);

在我看来,我希望有一个表格,我可以在其中连续显示药物、总销售额和平均销售额。

 @foreach($data as $key => $item)
    <tr id="item{{$item->id}}">                                                                             <td>{{$item->name}}</td>    
                 <td>{{$item->total_sales}}</td>    
                 <td>{{number_format($item->average_stocks,0)}}</td>

有什么建议吗?

【问题讨论】:

  • return view('viewname', ['sales' =&gt; $sales, 'stocks' =&gt; $stocks]) ?

标签: laravel foreach controller eloquent


【解决方案1】:

首先,按公共字段 (drug_id) 对两个集合对象进行分组,如下所示:

$sales = DB::table('sales')
        ->join('drugs', 'drugs.id', '=', 'sales.drug_id')
        ->select('sales.*','drugs.name', DB::raw('sum(sales.quantity_sold) as total_sales'))
        ->whereYear('date_sold','>','2014')
        ->whereYear('date_sold','<','2017')
        ->groupBy('sales.drug_id')
        ->get()->groupBy('drug_id');

$stocks = DB::table('stocks')
         ->join('drugs', 'drugs.id', '=', 'stocks.drug_id')
         ->select('stocks.*','drugs.name', DB::raw ('AVG(stocks.quantity_sold) as average_stocks'))
         ->whereMonth('date_sold','=', Carbon::today()->month)
         ->groupBy('stocks.drug_id')
         ->get()->groupBy('drug_id');

然后,像这样合并两个集合:

$data = $sales->merge($stocks);

最后,像这样从控制器注入视图中的数据:

return view('viewname', compact('data'));

【讨论】:

  • 我得到一个错误,调用一个非对象的成员函数merge()
  • 你能用 dd($sales) 查看 $sales 的样子吗?
  • 对于销售额:: array:3 [▼ 0 => {#323 ▼ +"name": "Isoniazid,300mg" +"total_sales": "409" } 1 => {#324 ▼ +“名称”:“氨苯砜,100mgs”+“total_sales”:“256”} 2 => {#325 ▼ +“名称”:“奈韦拉平,200mgs”+“total_sales”:“384”}]库存:数组:3 [▼ 0 => {#326 ▼ +“名称”:“异烟肼,300mg”+“平均销售额”:“37.5000”} 1 => {#327 ▼ +“名称”:“氨苯砜,100mgs” +"average_sales": "20.8462" } 2 => {#328 ▼ +"name": "奈韦拉平,200mgs" +"average_sales": "32.0000" } ]
  • 您是否在 $sales 和 $stock 的末尾都添加了 groupBy?如果你这样做了,请发布完整的错误堆栈
  • 当我将 groupBy(sales.drug_id) 放在 get() 之后,错误是调用非对象上的成员函数 groupBy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 2011-10-01
  • 2016-12-19
相关资源
最近更新 更多