Я работаю с базой Laravel, используя красноречие для взаимодействия с моей базой данных.PHP/Laravel/eloquent - Вставить динамическое количество строк в базу данных
У меня есть форма, которую я отправляю на свой контроллер. Эта форма имеет «теги», которые добавляются пользователем. Пользователь может добавить столько тегов, сколько захочет.
Я хочу, чтобы POST тегов, а затем в моем контроллере, вставьте каждый тег в новую строку таблицы, например, так:
$tag = new Tag;
$tag->user_id = Input::get('user_id');
$tag->tag_name = Input::get('tag_name');
$tag->save();
Как бы я справиться с этим? Сначала я подумал о том, чтобы каждый тэг в массив, POST массив, а затем в контроллере я бы циклически перебирал каждый элемент, вставляя их в базу данных.
See the code here, this was actually a previous stack overflow question
Но после того, как некоторое ища вокруг, я пришел к выводу, что вы не можете массив.
Таким образом, другим способом является POST каждое значение массива в виде скрытой формы. Проблема заключается в том, как сообщить моему контроллеру, сколько тегов (и для них строк) нужно вставить.
Я надеюсь, что это достаточно ясно, спасибо заранее.
EDIT: еще есть некоторые проблемы
EDIT 2: изменил код для включения «я» переменной в JavaScript, и что новый массив выглядит, когда вывешенным.
Это то, что пользовательский ввод тегов выглядит
$("#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 массив?] (Http://stackoverflow.com/q/9073690/697370) –
just loop 'Input :: all()'? Это должно хорошо работать – 2014-09-08 20:11:33
@ Адаптер, вход содержит больше данных.Например: <вход бла имя = «пользователь»> <вход бла имя = «комментарий»> <вход DYNAMIC имя = «тег»> <вход DYNAMIC имя = «тег»> Там будет только один пользователь и комментарий, но может быть один, три, десять - любое количество тегов. Я не могу представить, как все будет работать. (извинения за дерьмовое форматирование) – bjurtown