2015-11-14 84 views
0

選擇框有3個表laravel填充外鍵

Sizes 
id 
name 

Products 
id 
name 

Product_sizes 
id 
product_id 
size_id 

我想,以填補product_sizes的id和外鍵連接表大小的名稱的選擇框。

爲exampe:

product_sizes.id 1 
sizes.name   medium 

其中媒體將通過size_id在產品尺寸上找到。 我怎樣才能在名單中的名稱值?

我目前有

我能得到正確的一行

$sizes = $product->sizeAvailable()->lists('pr', 'size_id'); 

其中sizeAvailable是返回所選產品的所有product_sizes的關係。

回答

1

首先,您不需要透視表中的id字段,因爲您可以使用複合鍵product_id, size_id來唯一標識每行。一個產品可以屬於很多尺寸尺寸可以屬於很多產品,所以你不應該有重複的行。

每個模型的關係是這樣的:

class Product extends Model { 
    public function sizeAvailable() { 
     return $this->belongToMany('Size', 'product_sizes'); 
    } 
} 

class Size extends Model { 
    public function products() { 
     return $this->belongToMany('Product', 'product_sizes'); 
    } 
} 

最後,在你的瀏覽,你可以使用刀片函數生成您的選擇框:

<select> 
    @foreach($product->sizeAvailable() as $size) 
     <option value="{{ $size->id }}">{{ $size->name }}</option> 
    @endforeach 
</select> 
+0

我用一個id的原因是因爲laravel需要一個,當我刪除一個值,它需要一個ID。當只傳遞一個值(id)而不是多個值時(組合鍵),它的效率會更高。感謝您的答案! –

+0

@SvenB對於標準表而言,您所說的並不是數據透視表。在「多對多關係」部分查看[documentation](http://laravel.com/docs/5.1/eloquent-relationships)。你可以使用'attach/detach/sync'方法來處理數據透視表,只需使用'Sizes'和'Products'表的'ids'。 – mauricius