2016-04-07 10 views
0

商品を戻したり編集したりするとき、選択ボックスにデータを保存するにはどうすればよいですか?ここでフォームを編集するときに選択ボックスのドロップダウンでデータを取得する - Laravel 5.2

は、親とサブカテゴリと私の形である:ここでは

  <form role="form" method="POST" action="{{ route('admin.product.update', $product->id) }}"> 
       {{ csrf_field() }} 


       <div class="col-xs-12 col-sm-6 col-md-6"> 
        <div class="form-group{{ $errors->has('category') ? ' has-error' : '' }}"> 
         <label>Parent Category</label> 
         <select class="form-control" name="category" id="category" data-url="{{ url('api/dropdown')}}"> 
          <option value=""></option> 
          @foreach($categories as $category) 
           <option value="{{ $category->id }}">{{ $category->category }}</option> 
          @endforeach 
         </select> 
         @if($errors->has('category')) 
          <span class="help-block">{{ $errors->first('category') }}</span> 
         @endif 
        </div> 
        <br> 
       </div> 

       <div class="col-xs-12 col-sm-6 col-md-6"> 
        <div class="form-group{{ $errors->has('cat_id') ? ' has-error' : '' }}"> 
         <label>Sub-Category Category</label> 
         <select class="form-control" name="cat_id" id="sub_category"> 
          <option value=""></option> 
         </select> 
         @if($errors->has('cat_id')) 
          <span class="help-block">{{ $errors->first('cat_id') }}</span> 
         @endif 
        </div> 
        <br> 
       </div> 


       <div class="form-group col-md-12"> 
        <button type="submit" class="btn btn-primary waves-effect waves-light">Edit Product</button> 
       </div> 

      </form> 

は、結果がフォームを編集するために得るために、私の関数である。ここでは

/** 
    * Return the view to edit & Update the Products 
    * 
    * @param $id 
    * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 
    */ 
    public function editProduct($id) { 

     // Find the product ID 
     $product = Product::findOrFail($id); 

     // Get all Categories where parent_id = NULL 
     $categories = Category::whereNull('parent_id')->get(); 


     // Return view with products and categories 
     return view('admin.product.edit', compact('product', 'categories')); 

    } 

は私のカテゴリーのモデルであります私のカテゴリとサブカテゴリ:

class Category extends Model { 

    protected $table = 'categories'; 

    protected $fillable = ['category']; 


    /** 
    * One sub category, belongs to a Main Category (Or Parent Category). 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function parent() { 
     return $this->belongsTo('App\Category', 'parent_id'); 
    } 


    /** 
    * A Parent Category has many sub categories 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function children() { 
     return $this->hasMany('App\Category', 'parent_id'); 
    } 


    /** 
    * One Category can have many Products. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function product() { 
     return $this->hasMany('App\Product', 'id'); 
    } 

} 
0ここで

私のプロダクトテーブルのための私の製品モデルである: My Categories Table

My Products table

だけでできるようにする:

class Product extends Model { 

    protected $table = 'products'; 

    protected $fillable = [ 
     'product_name', 
     'price', 
     'cat_id', 
     'featured', 
     'brand_id', 
    ]; 


    /** 
    * One Product can have one Category. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasOne 
    */ 
    public function category() { 
     return $this->hasOne('App\Category', 'id'); 
    } 


} 

そして、ここでは私のカテゴリと商品テーブルが設定されている方法ですご存知のように、親カテゴリを選択すると、Ajaxコールが起動し、すべての親サブカテゴリが取得されます。私はこの質問にそれを含めていない。編集フォームの場合

@foreach($categories as $category) 
    <option value="{{ $category->id }}" @if(old('category')&&old('category')== $category->id) selected='selected' @endif >{{ $category->category }}</option> 
@endforeach 

:作成フォームの場合

答えて

1

@foreach($categories as $category) 
    <option value="{{ $category->id }}" @if($category->id==$model->category) selected='selected' @endif >{{ $category->category }}</option> 
@endforeach   
+0

$モデルに問題がありますが、何がそこに行くのか理解できませんが、トップは動作しますが、編集はできません – David

+0

これはオプションの結果を保持する変数ですこの – LewiG

0

まず、あなたの入力はバックフォームにリダイレクトされることを確認してください:

return redirect('form')->withInput(); 

をその後にキーをチェックあなたの古い入力データ:

@foreach($categories as $category) 
    <option value="{{ $category->id }}" {{ ($category->id == old('category') ? 'selected="selected"' : '') }}>{{ $category->category }}</option> 
@endforeach 
0

これは@ LewiGの答えに対する説明です。

アイテムを作成する際に入力が無効な場合は返信します。その場合は、old($key)入力を処理するためにビューを準備する必要があります。

Googleの特定の<select></select>タグでは、古い入力とオプションを比較します。例:

私たちは私たちの製品に(例えば)CATEGORY_IDプロパティを比較することによって、現在のカテゴリを選択し、事前項目、カテゴリを持つ例えば、製品、 を編集
@foreach($categories as $category) 
    <option value="{{ $category->id }}" @if(old('category')&&old('category')== $category->id) selected='selected' @endif >{{ $category->category }}</option> 
@endforeach 

。例:

@foreach($categories as $category) 
    <option value="{{ $category->id }}" @if($category->id==$product->category_id) selected='selected' @endif >{{ $category->category }}</option> 
@endforeach 

ここで、$ productまたは$ modelまたは$は何から得られますか? データベースは、雄弁は、クエリ、またはあなたが を作成しただけのオブジェクトは、私たちは、この変更を行うとしてみてください

return view('product.edit')->withProduct($product); 

または

return view('product.edit')->with('product',$product); 
+0

のためにモデルを使用してください、私は私の質問を編集しました、見てください – David

0

を使用してビューに戻す

   <div class="form-group"> 
       <label>Parent Category</label> 
         <select class="form-control" name="category" id="category" data-url="{{ url('api/dropdown')}}" > 
          <option value=""></option> 
          @foreach($categories as $category) 
           <option value="{{ $category->id }}" {{$product->Category->parent->id == $category->id ? "selected" : "" }}>{{ $category->category}}</option> 
          @endforeach 
         </select> 


        <br> 
       </div> 
+0

あなたのコードは、私が探していた答えです、私は同じ問題heheに遭遇しています – Copain

関連する問題