Laravel:在表中插入记录时。如何在不查询数据库的情况下在列表中添加该记录

时间:2017-10-20 00:56:26

标签: php arrays laravel insert

我有一个显示表中所有客户的客户列表

public function index(){

     $customers=Customer::all(); 
    return View::make('customer.customer-view')->with('customers',$customers);

}

添加新客户时,它会保存在db中。我想在所有客户表中显示最近添加的客户。我知道我可以再次查询数据库是否有一个很好的方法在Laravel将最近添加的客户obj添加到没有查询的客户数组中

存储客户

 public function  store(Request $request){

         $Customer = new Customer;
         $Customer->fill(Request::all());
         if($Customer->save()){
           // Here when it successfully inserted
          }
         return View::make('customer.customer-view'); //route to view all customer


}

2 个答案:

答案 0 :(得分:1)

一些事情。

  1. 您不应该从store操作或任何持久数据的内容返回视图。
  2. 在此,您要发布要保存的表单数据,然后在响应中返回一个视图 - 这是不好的做法。

    您应该做的是重定向到索引页面:

    public function  store(Request $request){
    
         $Customer = new Customer;
         $Customer->fill(Request::all());
         if($Customer->save()){
           // Here when it successfully inserted
          }
         return redirect('url/for/index/method'); //route to view all customer
    }
    

    如果您使用命名路线等,也可以使用类似的重定向。

    1. 您应该真正验证输入
    2. 您如何知道填写表格的人为您提供了正确的信息,甚至填写了表格?通过这个问题超出了您的问题的范围,但如果您想要添加它,我建议您阅读docs

      1. 您不是在订购客户
      2. 在您当前的store方法中,您只是返回与index方法相同的视图。你说你想要归还最新的客户。 因此,您应该查看排序结果以显示最新的结果。

        Eloquent提供latest()方法来帮助您实现这一目标。

        此外,您目前正在使用index方法退回所有客户 - 一旦您开始存储一些客户,您的视图中看起来就会非常难看。

        也许您想将此限制为最新的5,10或15?

        要实现这一点,您只需稍微改变一下index方法:

        public function index() {
        
            $customers = Customer::latest()->take(10)->get(); 
            return View::make('customer.customer-view')->with('customers',$customers);
        }
        

        一气呵成,这将是你的控制器看起来像,并应该实现你的目标:

        public function index() {
        
            $customers = Customer::all(); 
            return View::make('customer.customer-view')->with('customers',$customers);
        }
        
        public function store(Request $request){
        
             $Customer = new Customer;
             $Customer->fill(Request::all());
             if($Customer->save()){
               // Here when it successfully inserted
              }
             return redirect('url/for/index/method'); //route to view all customer
        }
        

答案 1 :(得分:0)

正如其他用户所说, 除了存储数据外,您的商店功能不应该执行任何其他操作。

  1. 删除商店功能的重定向
  2. 是的,可以在列表中插入新添加的记录, 但这是不可取的,因为您应该始终验证数据是否可接受以及数据库中是否确实存在。
  3. 我不认为在商店功能中添加1行会降低服务器的速度,

    - laravel商店功能

    public function  store(Request $request){
    
             $Customer = new Customer;
             $Customer->fill(Request::all());
             if($Customer->save()){
    
               // Here when it successfully inserted
               $new_record_id =  $Customer->id();
               $newlyAddedCustomer = Customer::find($new_record_id);
    
               return $newlyAddedCustomer;
    
              }else{
    
               return 'error';
              } 
    }
    

    - 如果您使用PHP Form post方法

    ,这将刷新您的页面和列表

    但如果您不使用PHP表单,可以使用jquery和ajax,

    来完成

    - HTML

    <ul id='my_list'>
       <li>item 1</li>
       <li>item 2</li>
    </ul>
    

    - AJAX

    $("#buttonSave").on("click", function(){
      var input1 = $("").val(); /* input1 */
      var input2 = $("").val(); /* input2 */
         $.ajax({
            url: 'your laravel route to your store controller',
            type: 'POST',
            dataType: 'json',
            data: { input1: input1, input: input2, _token: _token },
            success: function(data){
               if(data!='error'){
                 $("#my_list").append("<li>"+data[0].yourfield1+"</li>");
               }
            }
         })
    });