我来这里是为了寻求有关此案例逻辑的帮助,如果可能的话,也希望获得有关代码的帮助。
事情是这样的。假设我有这两个表,它们当然具有一对多关系:
*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 来做。在我的 Controller 中写入什么,以便它检测所有行并为每行中的数据创建数组,然后验证并插入它。 谁能帮我解决这个问题?
最佳答案
如果您查看 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',
),
)
因此,您所要做的就是将数组“表单数据”转换为数组“ Eloquent 就绪”。这可以通过一个简单的算法来完成:
$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 以将此信息添加到所有行中。
关于javascript - Laravel 多次插入到一张表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819843/
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有
在我的用户模型中,我有一堆属性,例如is_foos_admin和is_bars_admin,它们决定允许用户编辑哪些类型的记录。我想干掉我的编辑链接,目前看起来像这样:'edit'ifcurrent_user.is_foos_admin?%>...'edit'ifcurrent_user.is_bars_admin?%>我想做一个帮助程序,让我传入一个foo或bar并返回一个链接来编辑它,就像这样:助手可能看起来像这样(这不起作用):defedit_link_for(thing)ifcurrent_user.is_things_admin?link_to'Edit',edit_poly
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIgeneratealistofnuniquerandomnumbersinRuby?我想做的事:Random.rand(0..10).timesdoputsRandom.rand(0..10)end但如果随机数已经显示过,则无法再次显示。如何最轻松地做到这一点?
我有以下现有的Dog对象数组,它们按age属性排序:classDogattr_accessor:agedefinitialize(age)@age=ageendenddogs=[Dog.new(1),Dog.new(4),Dog.new(10)]我现在想插入一条新的狗记录,并将它放在数组中的正确位置。假设我想插入这个对象:another_dog=Dog.new(8)我想把它插入到数组中,让它成为数组中的第三项。这是一个人为的示例,旨在演示我特别想如何将一个项目插入到现有的有序数组中。我意识到我可以创建一个全新的数组并重新对所有对象进行排序,但这不是我的目标。谢谢!
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
在字符串连接中,是否可以直接在语句中包含条件?在下面的示例中,我希望仅当dear列表不为空时才连接"mydear"。dear=""string="hello"+"mydear"unlessdear.empty?+",goodmorning!"但是结果报错:undefinedmethod'+'fortrue我知道另一种方法是在这条语句之前定义一个额外的变量,但我想避免这种情况。 最佳答案 使用插值而不是连接更容易和更具可读性:dear=""string="hello#{'mydear'unlessdear.empty?},goodmo