如何在 JSON 中正确添加 2 项? - Laravel

How to add correctly 2 items in this JSON? - Laravel

我必须在数据库中同时保存 x2 个相同的数据字段(nifname)。

使用 1 个字段 (nif) 它可以完美地工作并在数据库中保存 x2 行具有不同的信息,因此 JSON 可以工作,但添加第二个字段 (name)它只是在所有字段中保存 nif 值。

我不太了解JSON和他的语法逻辑,但我认为问题是我在控制器中的写法。

P.D。不,我不能把 EnviarCurriculumPreguntas::create x2 放在一行中,因为这不是这段代码的目的,所以我使用 JSON 代替。

EnviarCurriculum.php

namespace App;

use Illuminate\Database\Eloquent\Model;

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 App\Http\Controllers\enviarCurriculum;

use App\EnviarCurriculum;
use App\Configuracion;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

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>
      <input type="text" name="nif[]" id="nif">

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

name 中,nif 只存储最后插入的项,请将其更改为数组

如果输入不是数组,则不能具有相同的名称

<!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() 方法修正为 return 两个解码字段。

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