2015-11-14 127 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