【问题标题】:Adding or Removing an Item in a Laravel Form在 Laravel 表单中添加或删除项目
【发布时间】:2014-07-09 21:42:43
【问题描述】:

我有一个可以创建交付请求的表单。基本上在该表单上,用户需要添加/删除项目及其数量。

这就是我构建表格的方式:

项目

  • id

  • item_name

交付请求

  • id

  • delivery_request_number

  • requested_by

delivery-request_item

  • id

  • delivery_request_id

  • item_id

  • item_quantity

例如,用户创建了一个交付请求。 并增加了 3 台 X-printer,2 台 Y-ink。

由于点击“添加项目”按钮上的提交,将重新加载或重定向用户的浏览器。我怎样才能添加/删除所说的项目,然后在保存时我会假设有类似的东西:

项目

  • id = 1

  • item_name = X-printer

  • id = 2

  • item_name = Y-ink

交付请求

  • id = 001

  • delivery_request_number = 0001

  • requested_by = John Doe

delivery-request_item

  • id = 1

  • delivery_request_id = 0001

  • item_id = 1

  • item_quantity = 3

  • id = 2

  • delivery_request_id = 0001

  • item_id = 2

  • item_quantity = 2

我不知道如何执行。

//create.blade.php
{{Form::open(array('method'=>'POST','route'=>'delivery-requests.store'))}}  
  {{Form::text('Requested by', Auth::user()->email, array('disabled'=>'true'))}}

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

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

    {{Form::submit('add item',array('name'=>'addItem'))}}
  </div>

  <div>
    <table>
        <theader>
            <tr>
                <td>ITEM NAME</td>
                <td>QUANTITY</td>
                <td></td>
            </tr>
        </theader>
        <tbody>
                <!-- loop through the items -->
                <td> {{-- Item name --}}</td>
                <td> {{-- Quantity--}}</td>
                <td> {{Form::submit('remove item', array('name' => 'removeItem'))}} </td>
        </tbody>
    </table>
  </div>

  {{Form::submit('submit', array('name' => 'submit'))}}
{{Form::close()}}

现在我还没有完成 DeliveryRequestsController 的代码,因为我不确定如何继续。

// DeliveryRequestsController
public function store()
{
    if(Input::has('addItem'))
    {
        // see if itme is already added,
        // add the item and quantity

        return Redirect::to('delivery-requests/create');
    }
    elseif(Input::has('removeItem'))
    {
        // remove the item and quantity

        return Redirect::to('delivery-requests/create');
    }
    elseif(Input::has('submit'))
    {
        $input = Input::all();
        $delivery_request = new DeliveryRequest;
        $delivery_request-> = Input::get('requested_by');
        $delivery_request->save()

        // get all items and quantities, save it

        return Redirect::to('delivery-requests');
    }
    else
    {
        return 'something went wrong';
    }
    return Redirect::route('delivery-requests.index');
}

编辑

从下面的屏幕截图中可以看出,我仍然需要重定向到同一页面并显示添加的项目。

【问题讨论】:

    标签: forms laravel laravel-4 blade


    【解决方案1】:

    你很接近。您确实有一些语法错误,但这应该适用于您假设您使用与项目 id 匹配的值填充您的选择..

    $delivery_request = new DeliveryRequest();
    $delivery_request->requested_by = Input::get('requested_by');
    $delivery_request->save();
    
    $delivery_request->items()->attach(Input::get('items'), array('quantity' => Input::get('item_quantity')));
    

    如果我可以提出一个建议,我会将DeliveryRequest 重命名为Cart,因为它在逻辑上更有意义。然后你可以有Delivery,它可以由许多Cart项目组成。

    【讨论】:

    • 哦,这应该很容易。我假设您有一个 index() 函数,它首先显示此页面,只需返回...return $this-&gt;index();。只要已添加项目并且您的索引函数显然正在查询添加的项目,就应该可以很好地工作。
    • 好吧,我还在试着理解你所说的,截至目前index(),只显示类似DeliveryRequest::all()的东西,无论如何这个想法只是显示所有创建记录。
    • 你已经有一个函数负责抓取你发出的所有交付请求,它看起来像用户然后返回适当的视图,可能是create.blade.php。这个想法是,每当您完成添加新的 DeliveryRequests 时,您都会返回该函数,该函数将再次查询所有交付请求并返回视图。
    • 我想我可能误读了您的第一条评论,是的,我有一个 index(),它会显示所有创建的 DeliveryRequests,但具有表单的页面是 create()。让我澄清一下表格底部的一些内容,“请求的项目”没有显示 index(),而是显示到目前为止添加的所有项目以及当前的交付请求。如果这变得有些混乱,我很抱歉,如果我误解了您的答案和 cmets,请告诉我。
    • 是的,我现在对你的问题有点困惑。 return Redirect::to('delivery-requests'); 不适合你吗?只要该路由与您用来打开带有表单的页面的路由相同,它就应该刷新页面。
    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 2021-10-03
    • 2019-03-26
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多