我来这里请求帮助解决这个案例的逻辑,如果可能的话,还要对代码提供一些帮助。
所以这就是事情。让我们假设我有这两个表,当然,它们有一个多关系:
*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的用途。在我的控制器中写什么,以便它将检测所有行并为每行中的数据创建数组,然后验证并插入它。 有人能帮我一把吗?
答案 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上,以将此信息添加到所有行中。