2016-07-31 6 views
0

これまでのところ、私はここで答えを見つけたので、何も質問する必要はありませんでした。しかし、この問題は本当に私を悩ましています。ここに状況があります。私はダイナミックな請求書フォームを持っています。フォームからのポストは、2つの異なるテーブルLaravel 5.2動的フォームからのデータの挿入と更新

  • invoiceitems(invoice_id、itemdescription、量、速度(請求書の詳細はMEMBER_ID、割引、duedate、発言及びタイムスタンプのように格納されている)
    1. 請求書に保存されますタイムスタンプ)

    は、ここでは、請求書

    public function store(InvoiceRequest $request) 
    { 
    
    //get necessary details for invoice table 
    $datainvoice = array(
    'member_id' => $request->input('member_id'), 
    'duedate' => $request->input('duedate'), 
    'discount' => $request->input('discount'), 
    'remarks' => $request->input('remarks'), 
    //'gtotal' => $request->input ('gtotal'), 
    ); 
    
    //save result of invoice 
    $resultforinvoice = Invoice::create($datainvoice); 
    
    
    // ready all data of invoice items 
    $datainvoiceitem = array(
    'description' => $request->input('description'), 
    'rate' => $request->input('rate'), 
    'quantity' => $request->input('quantity'), 
    'invoice_id' => $resultforinvoice->id, 
    ); 
    
    
    // insert invoice along with invoice_id 
    Invoiceitem::create($datainvoiceitem); 
    return redirect('members'); 
    
    } 
    

    追加情報を格納するための私の方法であり、これを達成するために:メンバーと請求書の間

    関係は::メンバー-あり、多くの-の請求書は、請求書は、所属対単一メンバー

    請求書とinvoiceitemsの関係::請求書-あり、多品目、 項目-属する対1-請求書

    ダイナミックフォームの部分

    <td> 1 </td> 
    <td><textarea type="text" name='description[0][description]' class="form-control"/></textarea> </td> 
    <td><input type="text" name='quantity[0][quantity]' class="form-control"/></td> 
    <td> <input type="text" name='rate[0][rate]' class="form-control"/> </td> 
    

    エラーは今\データベース\の文法を照らすために渡される引数1を受信イム::(パラメータ化)がでなければなりません型配列、in teger Cで呼ばれる、与えられた:\ xamppの\ htdocsに研究\ベンダー\ laravelの\枠組み\ \ SRC \を照らし\データベース\クエリー\文法\ Grammar.phpライン719上と

    を定義した更新

    とき私は起こっていただきました、私は

    { 
    "description": [ 
    { 
        "description": "desc1" 
    }, 
    { 
        "description": "desc2" 
    } 
    ], 
    "rate": [ 
    { 
        "rate": "11" 
    }, 
    { 
        "rate": "22" 
    } 
    ], 
    "quantity": [ 
    { 
        "quantity": "1" 
    }, 
    { 
        "quantity": "2" 
    } 
    ], 
    "invoice_id": 41 
    
    } 
    

    下記の男のような配列を取得チェックするinvoiceitemsの入力を返すようにしようと、イムが不足している場所を私に教えて教えてください。私もlaracastでこれを尋ねようとしていましたが、現時点では2時間もありませんでした。うまくいけば誰かが私を正しい方向に向けるでしょう。 Here is the laracast link.

  • +0

    あなたの入力名 '$ request-> input( 'description')によると'は単一の値ではなく配列を返します。その後、この配列を列の値として保存しようとします。私は確信していませんが、私はあなたの問題だと思います。 – Phargelm

    +0

    @Phargelm私はtranspose()を使ってこのソートをしようとしていますが、一度機能コードがあればこれを更新します – ashish

    +0

    @Phargelm imはチュートリアル[link](https://adamwathan.me/2016/04/06/)に従います。ここでは配列を適切に取得していますが、配列にinvoice_idという余分な情報を追加したいと思います。あなたは私を正しい方向に向けるでしょうか?私のものをここで更新しています。[リンク](https://laracasts.com/discuss/channels/eloquent/inserting-and-updating-data-from-dynamic-form-properly) – ashish

    答えて

    0

    のようになります。私は、コードの大部分を更新してしまった今では、この

    $items = []; 
        foreach ($request->items as $field => $values) { 
         foreach ($values as $index => $value) { 
          $items[$index][$field] = $value; 
         } 
        } 
    
    
        Invoice::create($invoice) 
         ->invoiceitem()->createMany($items); 
    

    のように見え、それだけで働きました。他の誰かがこれに助けを必要としていることを知らせてください。私は説明して嬉しいです

    +0

    どのようにアップデートを解決しましたか? – lewis4u

    +0

    これは私がそれをした方法です! 'foreach($ items as $ item){ $ invoice-> invoiceitem() - > updateOrCreate(['id' => $ item ['id']]、$ item); } ' – ashish

    +0

    古いものを削除して新しいものを追加するとどうなるでしょうか – lewis4u

    0

    私は(あなたが適切関係を設定した場合、あなただけの請求書createアイテムを持って、手動で各項目にinvoice_idを割り当てる必要はありません)

    public function store(InvoiceRequest $request) 
    { 
        $invoice_fields = ['member_id', 'duedate', 'discount', 'remarks', 'gtotal']; 
    
        $items = []; 
    
        foreach ($request->items as $field => $values) { 
         foreach ($values as $index => $value) { 
          $items[$index][$field] = $value; 
         } 
        }   
    
        Invoice::create($request->only($invoice_fields)) 
         ->items()->createMany($items); 
    
        return redirect('members');  
    } 
    

    を提案することができます。チュートリアルが示唆するように(私は違っそれを実装するものの、私の提案は、元のHTMLにインデックス番号を必要としない)


    あなたは別の方法にforeachの抽象的な、コレクションマクロは良い考えかもしれあり。フォーム用 HTMLが

    <input type="text" name="items[description][]"> 
    <input type="text" name="items[quantity][]"> 
    <input type="text" name="items[rate][]"> 
    
    <input type="text" name="items[description][]"> <!-- as many of --> 
    <input type="text" name="items[quantity][]">  <!-- these  --> 
    <input type="text" name="items[rate][]">   <!-- as needed --> 
    
    +0

    これは実際にはすべてを簡素化し、フォームは非常に単純ですが、1つのことは、フォームフォームフィールドをアイテム[description] []としてインデックスを作成せずに使用しているからです。フォームを検証するにはどうすればよいですか?あなたは私にいくつか考えを与えることができますか? – ashish

    +0

    NEVER MIND !!それを解決しました:私は終わったときにすべての事を投稿するつもりです! – ashish

    関連する問題