【问题标题】:laravel fill selectbox with foreign keylaravel 用外键填充选择框
【发布时间】:2016-02-15 16:26:54
【问题描述】:

有 3 张桌子

Sizes
id
name

Products
id
name

Product_sizes
id
product_id
size_id

我想用 product_sizes 的 id 和外键连接表大小的名称填充一个选择框。

例如:

product_sizes.id    1
sizes.name          medium

在产品尺寸中可以通过 size_id 找到介质。 我如何才能在列表中命名值?

我目前拥有的

我可以用

得到正确的行
 $sizes =  $product->sizeAvailable()->lists('pr', 'size_id');

其中 sizeAvailable 是返回所选产品的所有 product_size 的关系。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    首先,您不需要数据透视表中的id 字段,因为您可以使用组合键product_id, size_id 唯一标识每一行。一个 Product 可以属于多个 Size,而一个 Size 可以属于多个 Products,因此您不应该拥有重复行。

    各个模型的关系如下:

    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');
        }
    }
    

    最后在你的视图中你可以使用 Blade 函数来生成你的选择框:

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

    【讨论】:

    • 我使用 id 的原因是因为 laravel 需要一个,当我删除一个值时它需要一个 id。此外,仅传递 1 个值(id)而不是多个值(组合键)时效率更高 感谢您的回答!
    • @SvenB 您所说的适用于标准表,而不适用于数据透视表。检查“多对多关系”部分的documentation。您可以使用attach/detach/sync 方法来处理您的数据透视表,方法是仅使用SizesProducts 表中的ids
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2019-04-18
    • 2019-11-22
    • 2016-03-21
    • 2011-09-25
    相关资源
    最近更新 更多