将多个值添加到Session中以插入数据透视表

时间:2014-05-22 18:13:05

标签: php laravel laravel-4

我有三个表delivery-request_item,items和一个数据透视表delivery-request_item。在我的create.blade.php中,我有一个按钮,它将添加其中一个项目及其相应的数量。

我的解决方案是将项目和数量放入会话。现在我的问题是我只能创建一个记录,如果我决定添加另一个项目,则前一个项目会被覆盖。

create.blade.php

{{Form::open(array('method'=>'POST','url'=>'delivery-requests'))}}
{{Form::text('requested_by', Auth::user()->email)}}

<div>
    {{Form::label('Shows Items from table')}}   
    {{Form::select('item_id', $items)}}

    {{Form::label('Quantity')}}
    {{Form::text('item_quantity')}}

    {{Form::submit('add item',array('name'=>'addItem'))}}
    {{Form::submit('remove item', array('name' => 'removeItem'))}}
</div>
<hr>
<div>
    <table>
        <theader>
            <tr>
               <td>ITEM NAME</td>
               <td>QUANTITY</td>
            </tr>
        </theader>

            <!-- loop through all added items and display here -->

        @if(Session::has('item_id'))
        <h1>{{ Session::get('item_id') }}</h1>
        @endif
        @if(Session::has('item_quantity'))
        <h1>{{ Session::get('item_quantity')}}</h1>
        @endif
    </table>
</div>
{{Form::submit('submit', array('name' => 'submit'))}}
{{Form::close()}}

DeliveryRequestsController @商店

if(Input::has('addItem'))
{
  Session::flash('item_id', Input::get('item_id'));
  Session::flash('item_quantity', Input::get('item_quantity'));
  $data =  Session::all();
  $item = Item::lists('item_name','id');
  return View::make('test')->with('data',$data)->with('items',$item);   
}

1 个答案:

答案 0 :(得分:0)

两件事。

  1. 您需要将会话设为数组,否则您将始终覆盖。

  2. 您不需要使用flash(),因为一旦发出另一个请求,该数据将被删除,闪存数据是什么,数据会持续到下一个请求。

  3. 试试这个:

    if(Input::has('addItem')) {
        if(Session::has('items')) {
            Session::push('items', [
                'id'    => Input::get('item_id'),
                'qty'   => Input::get('item_quantity')
            ]);
        } else {
            Session::put('items', [
                'id'    => Input::get('item_id'),
                'qty'   => Input::get('item_quantity')
            ]);
        }
    }
    

    Session::push()适用于存储在会话中的数组,如果它不存在,则显然会使用Session::put()

    请记住,这些数据会一直存在,并且需要在某些情况下清除,例如一旦您完成它就会被清除。

    有关会话的更多信息,请阅读:http://laravel.com/docs/session