2017-11-14 12 views
0

私は、ショッピングリストに追加できる製品をリストしたフォームと、製品ごとにオプションのテキストフィールドノートを用意しました。チェックボックスを使用して、買い物リストに追加する商品を選択します。Laravel - 追加の値/チェックボックス配列を持つピボットテーブルを更新する

私が持っている問題は、後続の製品の注釈をproduct_shopping_listピボットテーブルに挿入するために最初の製品のチェックボックスをオンにしなければならないことです。私はトンを解決したと思う

コントローラ

public function update($shoppingList) 
{ 
    // Check if any product checkboxes ticked 
    if (request('products')) 
    { 
     // Get products (array) 
     $products = request('products'); 
     // Get notes (array) 
     $notes = request('notes'); 
     // Get shopping list 
     $shoppingList = ShoppingList::find($shoppingList); 
     // Save (attach products to shopping list and notes) 
     $sync_data = []; 
     for ($i = 0; $i < count($products); $i++) 
     { 
      $sync_data[$products[$i]] = ['notes' => $notes[$i]]; 
     } 
     $shoppingList->products()->attach($sync_data); 
     // Message 
     session()->flash(
      'message', 'Your products have been added to your list.' 
     ); 
    } else { 
     // If no checkboxes ticked 
     session()->flash(
      'message', 'No products selected.' 
     ); 
    } 
    // Redirect 
    return redirect()->route('shopping-list.show', $shoppingList); 
} 

ビュー

@forelse ($products as $product) 
    <div class="checkbox"> 
     <label for="products"> 
     {!! Form::checkbox('products[]', $product->id, false) !!} 
     @if ($product->essential) 
      <span class="essential">{{ $product->title }}</span> 
     @else 
      {{ $product->title }} 
     @endif 
     </label> 
    </div> 
    <div class="form-group"> 
     {!! Form::label('notes', 'Note') !!} 
     {!! Form::text('notes[]', null, [ 
      'class' => 'form-control', 
      'placeholder' => 'Note' 
     ]) !!} 
    </div> 

@empty 
    <div class="alert alert-info" role="alert"> 
     There are no available products. 
    </div> 
@endforelse 

ピボットテーブルスキーマ

Schema::create('product_shopping_list', function (Blueprint $table) { 
    $table->unsignedInteger('product_id'); 
    $table->unsignedInteger('shopping_list_id'); 
    $table->string('notes')->nullable(); 
    $table->primary(['product_id', 'shopping_list_id']); 
    $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade'); 
    $table->foreign('shopping_list_id')->references('id')->on('shopping_lists')->onDelete('cascade'); 
}); 

答えて

0

彼の問題。ここ は、ビューへの変更である:

{!! Form::text('notes[' . $product->id . ']', null, [ 
    'class' => 'form-control', 
    'placeholder' => 'Note' 
]) !!} 

、コントローラに変更:

// Save (attach products and notes to shopping list) 
foreach ($products as $id) 
{ 
    $shoppingList->products()->attach($shoppingList->id, 
    ['product_id' => $id, 'notes' => $notes[$id]]); 
} 
関連する問題