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');
});