Laravel多次插入一个表

时间:2014-05-23 01:57:37

标签: javascript php laravel-4 multiple-insert

我来这里请求帮助解决这个案例的逻辑,如果可能的话,还要对代码提供一些帮助。

所以这就是事情。让我们假设我有这两个表,当然,它们有一个多关系:

*These aren't the real tables, they're just to simplify things*

**Table books**
id
name

**Table books_reviews**
id
books_id
user_id   <-this would be the person who wrote a review
details   <-A varchar 140 field
rating    <-A 1 through 10 integer field

好的,现在。我想要做的是创建一个链接,只需在整个表单的表中追加一行。像这样......

HTML

<a href="#" id="myLink">Write one more review</a>
<table id="mytable">

</table>
<input type="submit">   <- This should sumbit all the rows for validation and insertion

Javascript

$(document).ready(function(){
    var click=0;
    $('#myLink').click(function(){
        click++;
    $('#mytable').append('<tr>
          <td><input type="text" class="form-control" id="details'+click+'" name="details'+click+'"</td>
          <td><input type="text" class="form-control" id="rating'+click+'" name="rating'+click+'"</td>
                         </tr>');
    });
});

好的,所以我觉得这很清楚。当然我还会在每一行附加特定的评论ID,但我认为没有必要在这里做。

问题是我无法弄清楚PHP的用途。在我的控制器中写什么,以便它将检测所有行并为每行中的数据创建数组,然后验证并插入它。 有人能帮我一把吗?

1 个答案:

答案 0 :(得分:4)

如果查看javascript生成的源代码,您应该会看到输入的名称如下:

details1 rating1
details2 rating2
...

这可能不是最佳选择,我建议您为所有输入命名,例如details[]rating[]。没有必要使用柜台。

就像你可能知道的那样,在laravel中你应该使用Input :: all()来获取所有表单数据。此函数应返回以下数组:

# array: form data
array(
    'details' => array(
        [0] => 'Content of details 1',
        [2] => 'Content of details 2'
    ),
    'rating' => array(
        [0] => 'Content of rating 1',
        [2] => 'Content of rating 2'
    )
)

要使用laravel一次插入多行,可以使用函数BookReview::insert($array),此函数接收要添加到数据库中的数组数组。这个数组应该是这样的:

# array: eloquent ready
array(
    array(
        'details' => 'Content of details 1',
        'rating' => 'Content of rating 1',
    ),
    array(
        'details' => 'Content of details 2',
        'rating' => 'Content of rating 2',
    ),
)

所以,你所要做的就是转换数组&#39;表格数据&#39;对于数组而言,他已经准备好了#39;这可以通过一个简单的算法来完成:

$input = Input::all();
$insert = array();
foreach($input['details'] as $key => $detail) {
    $insert[$key]['details'] = $detail;
}
foreach($input['rating'] as $key => $rating) {
    $insert[$key]['rating'] = $rating;
}
BookReview::insert($insert);

PS:在我的示例中,我没有添加其他字段,例如user_id和book_id。您应该将它添加到foreach上,以将此信息添加到所有行中。