在laravel中同时插入有多个关系表

时间:2014-06-30 17:20:31

标签: php laravel laravel-4 eloquent

我正在使用PHP Laravel Framework。我有1到M个关系表orderproducts

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字段的自动增量。

2 个答案:

答案 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);