laravel 5.6中的1对n关系

时间:2018-06-18 10:17:35

标签: php mysql laravel

我有一个发票模型,我希望它有'n'个产品,所以在我的发票模型中我放置了一个关系hasMany如下所示

 public function products(){
    return $this->hasMany('App\Product','id','product_id');
}

所以在发票数据库中,我为产品创建5个字段,为每个产品创建数量

 $table->increments('id');
        $table->text('title');
        $table->longText('description');
        $table->integer('client_id');
        $table->integer('product_id1');
        $table->integer('product_quantity1');
        $table->integer('product_id2')->nullable();
        $table->integer('product_quantity2')->nullable();
        $table->integer('product_id3')->nullable();
        $table->integer('product_quantity3')->nullable();
        $table->integer('product_id4')->nullable();
        $table->integer('product_quantity4')->nullable();
        $table->integer('product_id5')->nullable();
        $table->integer('product_quantity5')->nullable();

我想知道这是正确的方法,或者我应该使一个表包含产品的ID和发票的ID,以将它们相互组合???如果我必须创建一个新表,我应该如何设置关系? 感谢

1 个答案:

答案 0 :(得分:1)

这与发票和产品之间的Many To Many方法类似。添加连接发票和产品的联结表(invoice_products),表格应为invoice_idproduct_id,每个产品都有quantity的透视属性,例如

对于许多人而言,您可以在模型中添加定义,例如

class Invoice extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class, 'invoice_products', 'invoice_id')
                    ->withPivot('quantity')
                    ->as('invoice_products_pivot');
    }
}


class Product extends Model
{
    public function invoices()
    {
        return $this->belongsToMany(Invoice::class, 'invoice_products', 'product_id');
    }
}