簡體   English   中英

在Laravel 5中使用對象數組填充選擇框而沒有表單綁定

[英]Populate select box with array of object without form binding in laravel 5

我想填充具有對象數組的選擇框。

這是數組:

array (size=2)
  0 => 
    object(stdClass)[208]
      public 'tag_identifier' => string 'jewellery' (length=9)
      public 'id' => string '1' (length=1)
  1 => 
    object(stdClass)[207]
      public 'tag_identifier' => string 'jewellery-rings' (length=15)
      public 'id' => string '3' (length=1)

我要實現的目標是,我想從編輯表單中更新產品標簽部分,並且這樣做,我希望突出顯示添加產品時插入的所有標簽。

這是控制器方法

public function edit( $id ) {
    if(\Auth::guest()) {
        return redirect('/admin');
    }

    $arr = [
        'products.id AS product_id', 'products.name AS product_name', 'products.category_id AS cat_id', 'products.description AS product_description', 'products.quantity AS product_quantity', 'products.rate AS product_rate', 'products.discount_rate AS product_discount_rate', 'products.display AS product_display', 'products.approval AS product_approval',

        'categories.id AS category_id', 'categories.name AS category_name'
    ];

    $product = \DB::table('products')
                ->join('categories', 'products.category_id', '=', 'categories.id')
                ->where('products.id', '=', $id)
                ->select($arr)
                ->first();

    if ( $product ) {
        $category = Category::lists('name', 'id');
        $tag_lists = \DB::table('product_tag')
                    ->join('products', 'products.id', '=', 'product_tag.product_id')
                    ->join('tags', 'tags.id', '=', 'product_tag.tag_id')
                    ->where('product_tag.product_id', '=', $id)
                    ->select('tags.name AS tag_identifier', 'tags.id')
                    ->get();

        $tags = Tag::lists('name', 'id');
        return view('products.edit')
                ->with('product', $product)
                ->with('category', $category)
                ->with('tag_lists', $tag_lists)
                ->with('tags', $tags);
    }
    \Session::flash('no_product', 'Sorry! The product that you are looking for could not be found');
    return \Redirect::back();
}

在我看來:

<div class="form-group">
    {!! Form::label('tag_lists', 'Tags:') !!}
    {!! Form::select('tag_lists[]', $tags, [$tag_lists], ['class' => 'form-control input-sm', 'multiple']) !!}
</div>

$tags用於沒有標簽的產品,這意味着即使選擇了標簽,它也會顯示所有標簽,反之亦然。

請幫助我。 謝謝。

更新1 :在答案之后, 是我得到的數組,它並沒有幫助我。

array (size=2)
  1 => null
  3 => null

更新2 :更新1中有一個錯字,因此是結果。 這是編輯錯字后得到的。

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in field list is ambiguous (SQL: select `name` as `tag_identifier`, `id` from `product_tag` inner join `products` on `products`.`id` = `product_tag`.`product_id` inner join `tags` on `tags`.`id` = `product_tag`.`tag_id` where `product_tag`.`product_id` = 7)

PS :所有值都來自數據庫。 我正處於學習階段,這就是為什么我沒有使用表單模型綁定的原因,我想逐步進行。

使用Tag::lists('name', 'id')您已經在做最簡單的方法了。 現在,您必須將相同的內容應用於$tag_lists的查詢。 這應該工作:

$tag_lists = \DB::table('product_tag')
                ->join('products', 'products.id', '=', 'product_tag.product_id')
                ->join('tags', 'tags.id', '=', 'product_tag.tag_id')
                ->where('product_tag.product_id', '=', $id)
                ->select('tags.name AS tag_identifier', 'tags.id AS tag_id')
                ->lists('tag_identifier', 'tag_id');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM