我正在使用PHP Laravel Framework。我有1到M个关系表order
和products
。
ORDER TABLE - orderid <--autoincrement primary key
- orderdate
- Name
PRODUCTS TABLE - productid <--autoincrement primary key
- orderid <--foreign key reference to order table
- productName
- price
我的模型如下 - &gt;
订单型号:
class Order extends Eloquent
{
protected $table = 'order';
public function products()
{
return $this->hasMany('Products','orderid');
}
}
产品型号:
class Products extends Eloquent
{
protected $table = 'products';
}
我有一个表格,我正在接受订单日期,客户名称和产品详细信息,可以是多个产品。用户可以在一个订单中拥有一个或多个产品。
所以现在我有一次性插入两个表的详细信息
我读了这篇文档http://laravel.com/docs/eloquent#inserting-related-models他们已经在下面给出了插入相关模型的代码 - &gt;
$comments = array(
new Comment(array('message' => 'A new comment.')),
new Comment(array('message' => 'Another comment.')),
new Comment(array('message' => 'The latest comment.'))
);
$post = Post::find(1);
$post->comments()->saveMany($comments);
但是在这里他们知道要从父表中找到的id,但在我的情况下,我必须在Order表中插入详细信息,然后在Products表中插入有关之前插入的订单的产品的详细信息。 问题是如何找到新插入的orderid ?我在Order表中使用orderid
字段的自动增量。
答案 0 :(得分:8)
简单地:
$order = new Order;
... // assign some properties
$order->save();
$products = [new Product(...), new Product(...)];
$order->products()->saveMany($products);
并在模型上设置protected $primaryKey
,就像Zwacky已经说过的那样。
现在,我怀疑这是你想要的关系。这意味着每个产品仅存在于单个订单的上下文中。我认为这应该是很多人,但这是你的呼唤。
答案 1 :(得分:1)
如果您按模型创建模型,则不应该有任何问题。如果您save()
模型,则其主键id
属性将自动设置为最后插入的ID。这里有一些想法:
$products = [];
foreach (['product A', 'product B'] as $name) {
$product = new Product;
$product->name = $name;
$product->price = 15;
$product->save();
// $product->id will be set after save()
array_push($products, $product);
}
$someOrder->products()->saveMany($products);