3

我来这里请求有关此案例逻辑的一些帮助,如果可能的话,还需要一些有关代码的帮助。

事情就是这样。假设我有这两个表,当然,它们具有一对多关系:

*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 明智的。在我的控制器中写入什么,以便它将检测所有行并为每行中的数据创建数组,然后验证并插入它。任何人都可以帮我解决这个问题吗?

4

1 回答 1

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',
    ),
)

因此,您所要做的就是将数组“表单数据”转换为数组“雄辩就绪”。这可以通过一个简单的算法来完成:

$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 以将此信息添加到所有行中。

于 2014-05-23T03:02:49.983 回答