Как вставить (значения массива) более 1 значения из входных данных в 1 строку базы данных в Laravel? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть форма, похожая на ниже, с более чем 1 Ввод в моей форме с 1 именем, как ниже:

<form>
<input type="text" name="family">
<input type="text" name="inputCurrName[]">
<input type="text" name="inputCurrName[]">
<input type="text" name="inputCurrName[]">
<input type="submit" name="submit" value="submit">
</form>

и у меня есть таблица с 2 столбцами с именем столбца Семейство и CurrName

Я хочу сохранить несколько имен в одну строку столбца CurrName при отправке формы, например, это мои данные при отправке:

Family Input: ali inputCurrName[] Inputs : array(jack,peter,lara)

Я хочу сохранить только 1 запись в базе данных с такими данными, как:

familyColumn Value: ali | CurrNameColumn Value: {jack,peter,lara}

Я использовал приведенный ниже код, но он сохранил 3 записи в базе данных!

$input = $request->all();
for ($i = 0; $i <= count($input['inputCurrName']); $i++) {
  $user_data = [
    'family' => $input['family'],
    'curr_name' => $input['inputCurrName'][$i],
  ];

  User::Creat($user_data);
}

Что мне делать?

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы можете просто использовать foreach, а затем преобразовать данные в формат json, а затем вставить в одну строку

$arr = [];
foreach($request->get('inputCurrName') as $key => $value){
   $arr[$key] => $value;
}
$user_data = [
      'family' => $request->get('family_name'),
      'curr_name' => json_encode($arr),
     ];

User::Create($user_data);

Не знаете, как это работает, но, кажется, вы забыли передать csrf-token в форме,Добавьте @csrf чуть ниже тега <form>.

1 голос
/ 24 мая 2019

Вы выполняете for loop проверку длины inputCurrName, поэтому она проходит по каждой inputCurrName, поэтому вы получаете 3 записи на FamilyName.В этом случае вам будет нужна только 1 запись на FamilyName.

. Существует несколько способов вставить значения array из inputCurrName в 1 запись с помощью FamilyName.

Вы можете использовать serialize () для создания хранимого представления значения и unserialize () для декодирования его при извлечении из базы данных.

-OR-

Вы можете использовать implode () для создания списка с разделителями-запятыми при вставке записи.И после извлечения из базы данных используйте explode () , чтобы перебрать каждое из значений, разделенных запятыми.

-OR-

Если вы предпочитаете json, вы можете сделатьто же самое с json_encode () и json_decode () так же, как serialize () и unserialize ()

+------------+---------------------------------------------------------+
| FamilyName |                        CurrName                         |
+------------+---------------------------------------------------------+
| Ali        |  a:3:{i:0;s:5:"Laura";i:1;s:6:"Peter ";i:2;s:4:"Jack";} |
| Ali        |  Laura,Peter,Jack                                       |
+------------+---------------------------------------------------------+

Использование следующего кода даст вам примердля таблицы выше.curr_name_optional является частью $user_data array для демонстрации взрыва ().

<code><?php
if(isset($_POST) && count($_POST) > 0) {

    $inputFamilyName  = $_POST['family'];
    $inputCurrentName = $_POST['inputCurrName'];

    // Your laravel code here..
    $user_data = [
      'family' => $inputFamilyName,
      'curr_name' => serialize($inputCurrentName),
      'curr_name_optional' => implode(',', $inputCurrentName),
      'curr_name_optional_1' => json_encode($inputCurrentName)
    ];

    echo "<pre>";
    print_r($user_data);
    echo "
";}?>Фамилия:Название Curr:Название Curr:Название Curr:Отправить

Кроме того, я бы позаботился о том, чтобы обрезать и очистить входные данные вашей формы перед вставкой в ​​базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...