【问题标题】:Get or fetch Latest or last create multiple rows in laravel在 laravel 中获取或获取最新或最后创建多行
【发布时间】:2018-07-14 08:16:41
【问题描述】:

我急需帮助。我是 laravel 和编程的新手。

我有一个销售控制器,它使用 jquery 和 select 从表单中获取多条记录。

Sales Store 控制器如下所示:

    for ($i=0; $i < count($request['product_id']); ++$i) 
     {
     $sales= new Sale;        
                $sales->product_id = $request['product_id'][$i];
                $sales->qty= $request['qty'][$i];
                $sales->user_id = Auth::user()->id;
                $sales->save(); 
                $product = new Product;
                $product->where('id', '=', $request['product_id'][$i])->decrement('stock', $request['qty'][$i]);

            }

这段代码运行良好。

现在的情况是我想获取这些最后创建的特定记录,以便以某种方式将其发送到其他页面或作为发票。任何帮助将不胜感激如何实现这一目标?谢谢。

【问题讨论】:

  • 感谢您的快速回复。是的,我确实有时间戳。这些行将由销售人员动态添加。如果他只销售一种产品,它应该得到一种产品,如果它有多个产品假设 3,那么 Sale::limit(5) 也会拉取不必要的 2 个其他字段。
  • 所以你只需要销售??或者也有产品??还是只有产品??
  • 我想要销售和产品。

标签: database laravel laravel-5 laravel-eloquent


【解决方案1】:

创建一个new array 以将sales and product 数据和redirect 保存到您的desired urldata

$data = array();
for ($i=0; $i < count($request['product_id']); ++$i) 
 {
     $sales= new Sale;        
     $sales->product_id = $request['product_id'][$i];
     $sales->qty= $request['qty'][$i];
     $sales->user_id = Auth::user()->id;
     $sales->save(); 
     $product = new Product;
     $product->where('id', '=', $request['product_id'][$i])->decrement('stock', $request['qty'][$i]);
     $data[]['sales'] = $sales;
     $data[]['product'] = $product;

 }
return redirect("/your desired url")->with('data', $data);

对于评论中的第二个问题,在您想要的urlcontroller 函数中执行此操作 -

$data = [];
if ($request->session()->has('data')) {
    $data = $request->session()->get('data');
}

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

然后在你看来 -

@foreach($data as $d)
    {{$d['sales']}}  //here $d['sales'] is your sales object
    {{$d['product']}} //here $d['product'] is your product object
@endforeach

【讨论】:

  • 非常感谢。你能指导我如何在视图中显示这些数据吗?
  • 谢谢。但是我得到了为 foreach() 错误提供的无效参数。
  • @MuhammadShahzad 查看我的更新答案,它应该可以解决您的问题
  • 再次感谢您。它把我重定向回sales.index,我不知道为什么? $数据 = []; if ($request->session()->has('data')) { $data = $request->session()->get('data'); } return view('admin.invoice.index', compact('data'));
  • 我也不知道,因为它很不清楚,也许你可以用更新的控制器和视图代码提出一个新问题,这样其他人可以帮助你
【解决方案2】:

你可以的

$sales = Sale::latest()->take(count($request['product_id']))->get();

latest() 将按创建日期的降序排列所有销售额。

如果 count($request['product_id']) 是 5,take() 将获取前 5 个销售额。

【讨论】:

  • 感谢您的快速回复。销售::latest()->first();只会获取最后一行。请阅读我上面的评论。谢谢。
  • 我已经更新了我的答案。我希望我现在已经回答了你的问题
  • 您的查询在逻辑上是正确的。并感谢您的回复。我在 $sales->save(); 之后添加了它$lastSale = Sale::latest()->take(count($request['product_id']))->get(); return view('admin.sales.invoice', compact('lastSale'));但我得到一个空白的白页。它甚至没有加载布局。你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多