如何在DBtable的同一字段中保存2次不同的数据? - Laravel

How to save 2 times different data in the same field of DB table? - Laravel

这有点难以解释,但我会用最简单的方式来解释。

我有一个表单,其中 1 个字段重复 2 次以在同一次提交中保存 2 个不同的时间。

目的是将那些2次重复的字段同时保存在DB的2个不同行中。

为什么是这样的结构?我不知道,但这是创建表单和 table 的方式,并且无法修改。

有什么办法吗?修改模型?也许是控制器?帮助 Laravel 大师。

DB Structure

  • ID (Primary Key, AUTOINCREMENT)
  • Data (String)

DataController.php

namespace App\Http\Controllers\data;

use App\Data;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class DataController extends Controller
{
    public function create()
    {
        return view('data', ['Data' => new Data()]);
    }

    public function store(Request $request)
    {
        Data::create($request->validated());
    }
}

Data.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Data extends Model
{
    protected $table = 'table_data';

    protected $primaryKey = 'ID';

    protected $fillable = [
        'data'
    ];

    public $timestamps = false;
}

data.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Send Data</title>
</head>
<body>
    <form action="{{ route("store") }}" method="POST">
        @csrf
        
        {{-- Data in field 1 in DB --}
        <div>
            <input type="text" name="data" id="data">
        </div>

        {{-- Data in field 2 in DB --}
        <div>
            <input type="text" name="data" id="data">
        </div>

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

您将 JSON 添加到数据库 只需按照步骤

{{-- At blade --}
{{-- Data in field 1 in DB --}
<div>
    <input type="text" name="data[]" id="data"> <!-- you should add[] to return array of data -->
</div>

{{-- Data in field 2 in DB --}
<div>
   <input type="text" name="data[]" id="data">
</div>

下一步

// At controller
$request->validate([
   'data.*' => ['required', 'date'], // your validation
]);
$json = json_encode($request->get('data'));
Data::create(['data' => $json]);

下一步是从数据库中调用数据

// Model (Data)
// We change from json to array (you can do anything here like chage date format)
public function getDataAttribute()
{
   return json_decode($this->data);
}

最后一步

//anywhere
$model->data[0]
$model->data[1]

注意您可以使用不同的密钥,只需在 HTML 更改名称 data1data2 如果您想这样做,请告诉我,我会编辑答案。

另请注意:我没有尝试此代码,如果有任何问题请告诉我。

编码愉快。