我有一个发票模型,我希望它有'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,以将它们相互组合???如果我必须创建一个新表,我应该如何设置关系? 感谢
答案 0 :(得分:1)
这与发票和产品之间的Many To Many方法类似。添加连接发票和产品的联结表(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');
}
}