2017-05-17 5 views
1

私は、ユーザーにショップとショップがあるシステムを持っています。Laravel edit製品が正しく選択されています(多対多)

現在、ショップには多くの商品があり、商品は多くのショップに所属できます。ユーザーは、新しい製品を追加すると、彼/彼女はショップは、彼/彼女は時にユーザーマイ問題があり、それを

ショップ

+----+---------+----------------+ 
| id | user_id |  name  | 
+----+---------+----------------+ 
| 1 |  1 | My First Shop | 
| 2 |  1 | My Second Shop | 
+----+---------+----------------+ 

Shop_Products

+---------+------------+-----------+ 
| shop_id | product_id | image | 
+---------+------------+-----------+ 
|  1 |   1 | beer.jpg | 
|  1 |   2 | wine.jpg | 
|  1 |   3 | vodka.jpg | 
+---------+------------+-----------+ 

を追加したいのために選択することができます商品を編集するこの商品が割り当てられている現在のショップで、ショップ選択ドロップダウンメニューにあらかじめ入力したいです。

しかし、私は、次の

@foreach(\Auth::user()->shops as $shop) 
    <option value="{{ $shop->id }}" @if($shop->id == $product->shop->id) selected @endif>{{ $shop->description }}</option> 
@endforeach 

をしようとしている選択した正しい選択オプションを設定するには、それゆえ、多対多の私の見解で

$product = Product::findOrFail($id)->shops 

コレクションを返しoffcourse次のクエリ$ product-> shopがコレクションであるため、$ product-> shop-> idは動作しません。

あなたのアイデアを楽しみにしています!あなたは

答えて

1

@foreach(\Auth::user()->shops as $shop) 
    <option value="{{ $shop->id }}" {{ $product->shops->contains('id', $shop->id) ? "selected" : "" }} >{{ $shop->description }}</option> 
@endforeach 

コードを$product->shops->contains('id', $shop->id)は、店舗コレクションにキー値の組み合わせがかどうかを確認しますと$shop->id

-1

使用shop_idの代わりにありがとう$product->shop->id私はあなたがコレクションで(https://laravel.com/docs/5.4/collections#method-contains

containsメソッドを使用することができ、あなたの状況で考える

@foreach(\Auth::user()->shops as $shop) 
    <option value="{{ $shop->id }}" @if($shop->id == $product->shop_id) selected @endif>{{ $shop->description }}</option> 
@endforeach 
+0

ProductがProductであり、多対多の関係ではないため、shop_idは使用できません。 – Notflip

0

あなたのお店のすべてのIDを返すために、あなたのコレクション許可に摘むメソッドを使用して、この

@foreach(\Auth::user()->shops as $shop) 
    <option value="{{ $shop->id }}" {{ in_array($shop->id, $product->shops->pluck('id')) ? 'selected' : '' }}>{{ $shop->description }}</option> 
@endforeach 

を試してみてください:)

0

私は、これがpluck()方法のための完璧な候補だと思います

$shops = Product::findOrFail($id)->shops()->pluck('description', 'id'); 

そして、あなたのビューで、あなたがこれを行うことができます::

を、私はあなたがこれを行うことができると信じて
@foreach ($shops as $key => $value) { 
    <option value="{{ $key }}">{{ $value }}</option> 
@endforeach 
関連する問題