1与n的关系

lsmd5eda  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(463)

我有一个发票模型,我希望它有'n'的产品在它,所以在我的发票模型,我把一个关系有很多像下面

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

所以在invoice数据库中,我为产品创建了5个字段,为每个产品创建了一个Quantity

$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的表格来将它们结合起来???如果我要做一个新的表格,我应该如何设置关系?谢谢

pokxtpni

pokxtpni1#

这看起来类似于发票和产品之间的多对多方法。添加一个连接表(invoice\u products),连接invoice和products,表应该有 invoice_id , product_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');
    }
}

相关问题