Как правильно добавить 2 элемента в этот JSON? — Ларавель

#php #laravel #laravel-6

Вопрос:

Я должен сохранить x2 те же поля данных ( nif и name ) одновременно в БД.

С 1 полем ( nif ) он отлично работает и сохраняет x2 строки в БД с другой информацией, поэтому JSON работает, но добавление 2-го поля ( name ) просто сохраняет nif значение во всех полях.

Я не очень понимаю JSON и его синтаксическую логику, но я думаю, что проблема в том, как я написал это в контроллере.

P. D. Нет, я не могу поставить EnviarCurriculumPreguntas::create x2 в ряд, потому что это не цель этого кода, поэтому вместо этого я использую JSON.

EnviarCurriculum.php

 namespace App;

use IlluminateDatabaseEloquentModel;

class EnviarCurriculum extends Model
{
    protected $table = 'table';

    protected $primaryKey = 'ID_table';

    protected $fillable = [
        'nif',
        'name'
    ];

    public function getRepeatedFields()
    {
       return json_decode($this->nif);
       return json_decode($this->name);
    }
}
 

EnviarCurriculumController.php

 namespace AppHttpControllersenviarCurriculum;

use AppEnviarCurriculum;
use AppConfiguracion;
use AppHttpControllersController;
use IlluminateHttpRequest;

class EnviarCurriculumController extends Controller
{
    public function index()
    {
        return view('enviar_curriculum', ['EnviarCurriculum' => new EnviarCurriculum()]);
    }

    public function create()
    {
        return view('enviar_curriculum', ['EnviarCurriculum' => new EnviarCurriculum()]);
    }

    public function store(Request $request)
    {
         foreach (request('nif', 'name') as $val) {
            EnviarCurriculum::create(['nif' => $val, 'name' => $val]);
        }
    }
}
 

enviar_curriculum.blade.php

 <!DOCTYPE html>
<html lang="es">
<head>
    ...
</head>
<body>
    <form action="{{ route("store") }}" method="POST">
        @csrf
        
        <div>
           <input type="text" name="nif[]" id="nif">

           <input type="text" name="name[]" id="name">
        </div>

        <br>

        <div>
           <input type="text" name="nif[]" id="nif">

           <input type="text" name="name[]" id="name">
        </div>

        <input type="submit" class="btn btn-primary" value="Enviar"> 
    </form>
</body>
</html>
 

Комментарии:

1. публичная функция getRepeatedFields() { возвращает json_decode($this->nif); возвращает json_decode($this->>имя); }

Ответ №1:

вы не можете иметь входные данные с одинаковым именем, не будучи массивом

 <!DOCTYPE html>
<html lang="es">
<head>
    ...
</head>
<body>
    <form action="{{ route("store") }}" method="POST">
        @csrf
        <div>
           <input type="text" name="nif[]" id="nif">
           <input type="text" name="name[]" id="name">
        </div>
        <br>
        <div>
           <input type="text" name="nif[]" id="nif">
           <input type="text" name="name[]" id="name">
        </div>
        <input type="submit" class="btn btn-primary" value="Enviar"> 
    </form>
</body>
</html>
 

Затем в вашем методе магазина выполните цикл ввода массива

 public function store(Request $request)
{
    $nifs = $request->input('nif', []);
    $names = $request->input('name', []);
    foreach ($nifs as $key => $nif) {
        EnviarCurriculum::create(['nif' => $nif, 'name' => $names[$key]??'']);
    }
}
 

Затем исправьте свой getRepeatedFields() метод, чтобы возвращать оба декодированных поля.

 public function getRepeatedFields()
{
    return [
        'nifs' => json_decode($this->nif),
        'names' => json_decode($this->name),
    ];
}
 

Комментарии:

1. Большое спасибо за этот превосходный код и теорию, чтобы понять его!!!

Ответ №2:

       <input type="text" name="nif[]" id="nif">

       <input type="text" name="name[]" id="name">
 

в названии nif хранится только последний вставленный элемент , пожалуйста, измените его как массив

Комментарии:

1. Ой, это правда! Спасибо!