繁体   English   中英

Laravel保存hasAndBelongsToMany关系

[英]Laravel saving a hasAndBelongsToMany relationship

在我的Laravel 4应用中,我有以下模型:

  • 付款 (编号, 付款日期 ,收件人)
  • PayerPayment (id,payment_id,payer_id,amount_paid,included_in_payment)
  • 付款人 (身份证,姓名)

您可能已经注意到,付款可以有很多付款人,而付款人可以有很多付款。 这些模型与PayerPayment模型结合在一起,该模型还包含其他字段(amount_paid,included_in_payment),该字段说明每个付款人支付了多少以及是否应将它们包括在总付款中。

当我添加新的付款时,我希望表单包含每个付款人的输入,我可以在其中填写2个PayerPayment字段(amount_paid,included_in_payment)。

目前,我这样做的方法是将付款人记录集传递给构造表单的视图:

控制器:

public function add()
{
    $payers = Payer::all();
    return View::make('payments.add')->with('payers', $payers);
}

视图:

  {{ Form::open( array('route'=>'payments.store', 'class'=>'form-signup')) }}

  {{ Form::input('date', 'payment_date', null, array('class'=>'form-control')) }}
  {{ Form::text('recipient', null, array('class'=>'form-control')) }}

  @foreach ($payers as $payer)
      <fieldset>
      {{ Form::label($payer->id . '-amount', $payer->name) }} <br>
      {{ Form::input('number', $payer->id . '-amount_paid', null, array('class'=>'form-control', 'step' => 'any', 'value' => 0)) }}
      {{ Form::checkbox($payer->id . '-included_in_payment', null, array('class'=>'form-control', 'label'=>'pays')) }}
      {{ Form::label($payer->id . '-included_in_payment', 'pays') }}
     </fieldset>
  @endforeach

  {{ Form::submit('Add Payment', array('class'=>'btn btn-primary')) }} 

  {{ Form::close() }}

现在,当我来保存付款时,我的控制器当前如下所示:

$payment = new Payment;
            $payment->payment_date = Input::get('payment_date');
            $payment->recipient = Input::get('recipient');
            $payment->save();

            //Save the amount each payer paid
            $payers = Payer::all();
            foreach ($payers as $payer){
                $payment_payer = new PayerPayment;
                $payment_payer->payment_id = $payment->id;
                $payment_payer->payer_id = $payer->id;

                $payment_payer->amount_paid = Input::get($payer->id . '-amount-paid') ? Input::get($payer->id . '-amount_paid') : 0;

                $payment_payer->included_in_payment = Input::has($payer->id . '-included_in_payment');
                $payment_payer->save();
            }

这似乎是做事的一种坏方法。 通过循环所有付款人,我将与保存父付款分开创建一个新的PayerPayment。 laravel有办法一口气做到这一点吗?

您所追求的是“ 插入相关模型

因此,保存付款后,您可以将其添加到用户中,如下所示:

...
$payment->save();

$payers = Payer::all();
foreach ($payers as $payer){

    $extra_details = array(
        'amount_paid' => Input::get($payer->id . '-amount-paid') ? Input::get($payer->id . '-amount_paid') : 0, 
        'included_in_payment' = Input::has($payer->id . '-included_in_payment')
    );

    $payer->payments()->attach($payment->id, $extra_details);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM