【发布时间】:2014-11-02 03:36:48
【问题描述】:
我正在使用 Laravel 框架,使用 eloquent 与我的数据库进行交互。
我有一个表单,我将它发布到我的控制器。此表单具有用户添加的“标签”。用户可以根据需要添加任意数量的标签。
我想发布标签,然后在我的控制器中,将每个标签插入一个新的表格行,如下所示:
$tag = new Tag;
$tag->user_id = Input::get('user_id');
$tag->tag_name = Input::get('tag_name');
$tag->save();
我将如何处理这个问题?起初我想将每个标签放入一个数组中,发布数组,然后在控制器中循环遍历每个元素,将它们插入数据库。
See the code here, this was actually a previous stack overflow question
但经过一番搜索后,我得出的结论是您无法发布数组。
所以另一种方法是将每个数组值作为隐藏的表单类型发布。问题在于如何告诉我的控制器要插入多少个标签(以及行)。
我希望这足够清楚,在此先感谢。
编辑:还是有一些麻烦
编辑 2:更改代码以在 javascript 中包含“i”变量以及新数组在 POST 时的样子。
这是用户生成的输入标签的样子
$("#tagsbox")
.append("<div class='displaytag'><i>"+tag+"</i><input type='hidden' name='tags["+i+"]["+user_id+"]' value="+user_id+"><input type='hidden' name='tags["+i+"]["+tag+"]'value="+tag+">")
这是 POST 数据提交后的样子
Array
(
[user_id] => 12
[lat] => 50.80589
[lng] => -0.02784
[spot_name] => test spot
[tags] => Array
(
[1] => Array
(
[12] => 12
[tag1] => tag1
)
[2] => Array
(
[12] => 12
[tag2] => tag2
)
[3] => Array
(
[12] => 12
[tag3] => tag3
)
)
[location_notes] => some notes
[comments] => some comments
[_token] => Cfsx56FZiEKcVz76mkcZvuBtVG7JQSmdJUffFMfM
)
控制器保持不变
//dynamic tags
$tags = Input::get('tags');
foreach ((array) $tags as $tagData)
{
// validate user_id and tag_name first
$tag = Tag::create(array_only($tagData, ['user_id', 'tag_name']));
}
//create spot
$spot = new Spot;
$spot->user_id = Input::get('user_id');
$spot->latitude = Input::get('lat');
$spot->longitude = Input::get('lng');
$spot->spot_name = Input::get('spot_name');
$spot->location_notes = Input::get('location_notes');
$spot->comments = Input::get('comments');
$spot->save();
return Redirect::route('home')
->with('global', 'Spot successfully tagged. You can edit all your spots on your profile.');
我仍然设法在应该有标签的数据库行中获取空值。我哪里错了?
【问题讨论】:
-
为什么不能POST an array?
-
只是循环
Input::all()?这应该工作 -
@Allendar 好吧,输入带有更多数据。例如: 只有一个用户和评论输入,但可能有一个、三个、十个 - 任意数量的标签。我无法真正想象遍历所有内容将如何工作。 (为糟糕的格式道歉)
-
为什么不对所有帖子字段进行循环并连接并检查真相?
if (Input::get('comment'.$i)) { ... }直到你找到它们? :) 如果您不确定范围,则必须将其限制在某个循环计数的某个地方。 -
干杯@watcher,这是一个非常有用的链接,我会使用这个方法!
标签: php dynamic laravel insert eloquent