如何在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 更改名称 data1
、data2
如果您想这样做,请告诉我,我会编辑答案。
另请注意:我没有尝试此代码,如果有任何问题请告诉我。
编码愉快。
这有点难以解释,但我会用最简单的方式来解释。
我有一个表单,其中 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 更改名称 data1
、data2
如果您想这样做,请告诉我,我会编辑答案。
另请注意:我没有尝试此代码,如果有任何问题请告诉我。
编码愉快。