首页 文章

Laravel:如何从此数据透视表中获取数据?

提问于
浏览
4

SOLVED :答案发布在下面

如何从此数据透视表和规格表中获取值?

我想在模板中显示这个:

-Model(规格表中的名称)

--Brand(属性表格数据透视表):example1(数据透视表中的值)

--Model(属性表格数据透视表):example123(数据透视表中的值)...


在ProductController中,我尝试返回类似这样的内容 $product = Product::with('specifications')->first(); ,但后来我只能从规格表中获取数据,如果我尝试 $product = Product::with('product_specification')->first(); ,我会收到错误 Call to undefined relationship [product_specification] on model [App\Product].


数据透视表:

public function up()
{
    Schema::create('product_specification', function (Blueprint $table) {
        $table->engine = 'InnoDB';

        $table->increments('id');
        $table->integer('product_id')->unsigned()->index();
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
        $table->integer('specification_id')->unsigned()->index();
        $table->foreign('specification_id')->references('id')->on('specifications')->onDelete('cascade');
        $table->string('attribute');
        $table->string('value');
    });
}

规格表:

public function up()
{
    Schema::create('specifications', function (Blueprint $table) {
        $table->engine = 'InnoDB';

        $table->increments('id');
        $table->string('name')->unique();
        $table->timestamps();
    });
}

产品型号:

public function specifications() 
{
    return $this->belongsToMany(Specification::class, 'product_specification');
}

1 回答

  • 3

    我不得不将withPivot()添加到我的Product模型中

    public function specifications() {
        return $this->belongsToMany(Specification::class, 'product_specification')->withPivot('attribute', 'value');
    }
    

    然后在模板中:

    foreach($product->specifications as $specification) {
        echo 'name: ' . $specification->name . ' attribute: ' . $specification->pivot->attribute . ' value ' . $specification->pivot->value . '</br>';
    }
    

相关问题