#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. Ой, это правда! Спасибо!