输入数据未按预期存储在 Laravel 6 中
Input data is not stored as expected in Laravel 6
我有一个带有动态 table 的表格,其中我可以 add/remove 行,我想将数据保存到 Transaction_in
和 Transaction_in_detail
table,当我将数据保存到 Transaction_in
时,table 会按预期保存,但不会保存 Transaction_in_detail
。
当我提交数据时,无论我在 table 中放入多少行 Transaction_in_detail
table 中保存的数据,总是给我 10 个所有空行。
店长
public function store(Request $request)
{
$request->validate([
'supplier_id' => 'required',
'transaction_in_date' => 'required|before_or_equal:today',
'device_type_id' => 'required',
'device_brand_id' => 'required',
'device_spec' => 'required|max:255',
'price' => 'required',
'amount' => 'required',
'total_price' => 'required',
'keterangan' => 'Nullable',
]);
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->input('supplier_id');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
foreach ($transaction_in as $tin) {
$tdin[] = [
'Transaction_in_id' => $transaction_in->id[$tin],
'DeviceType_id' => $transaction_in->device_type_id[$tin],
'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
'spek_device' => $transaction_in->device_spec[$tin],
'harga_device' => $transaction_in->price[$tin],
'jumlah_device' => $transaction_in->amount[$tin],
'total_harga_device' => $transaction_in->total_price[$tin]
];
Transaction_in_detail::insert($tdin);
}
$transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);
return redirect('/transactionsin')->with('success', 'Transaction success');
}
以下是 dd()
.
的输出
不知道错在哪里;这是模型。
Transaction_in型号
class Transaction_in extends Model
{
protected $guarded = [];
public function get_suppliers()
{
return $this->belongsTo(Supplier::class, 'Supplier_id');
}
public function get_devicetypes()
{
return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
}
public function get_devicebrands()
{
return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
}
}
Transaction_in_详细型号
class Transaction_in_detail extends Model
{
protected $guarded = [];
public function get_transction_in_id()
{
return $this->belongsTo(Transaction_in::class, 'Transaction_in_id');
}
public function get_devicetypes()
{
return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
}
public function get_devicebrands()
{
return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
}
}
表单在Transaction_in
视图中,Store Controller
来自transaction_inController
,DeviceType_id
和DeviceBrand_id
都是外键。
这是 Transaction_in
table 在数据库中的预期工作。
你的存储方法有点奇怪,这是我认为你应该做的:
public function store(Request $request)
{
$request->validate([
'supplier_id' => 'required',
'transaction_in_date' => 'required|before_or_equal:today',
'device_type_id' => 'required',
'device_brand_id' => 'required',
'device_spec' => 'required|max:255',
'price' => 'required',
'amount' => 'required',
'total_price' => 'required',
'keterangan' => 'Nullable',
]);
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->get('supplier_id');
$transaction_in->tanggal_transaksi = $request->get('transaction_in_date');
$transaction_in->save();
Transaction_in_detail::create([
'Transaction_in_id' => $transaction_in->id,
'DeviceType_id' => $request->get('device_type_id'),
'DeviceBrand_id' => $request->get('device_brand_id'),
'spek_device' => $request->get('device_spec'),
'harga_device' => $request->get('price'),
'jumlah_device' => $request->get('amount'),
'total_harga_device' => $request->get('total_price')
]);
$transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);
return redirect('/transactionsin')->with('success', 'Transaction success');
}
我认为所有 10 行都变为空,因为循环计算了 table 列的计数。
你的代码
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->input('supplier_id');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
foreach ( $transaction_in as $tin) {
$tdin[] = [
'Transaction_in_id' => $transaction_in->id[$tin],
'DeviceType_id' => $transaction_in->device_type_id[$tin],
'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
'spek_device' => $transaction_in->device_spec[$tin],
'harga_device' => $transaction_in->price[$tin],
'jumlah_device' => $transaction_in->amount[$tin],
'total_harga_device' => $transaction_in->total_price[$tin]
];
Transaction_in_detail::insert($tdin);
}
我的代码
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->input('supplier_id');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
$transaction_in1 = new Transaction_in();
foreach ( $transaction_in1 as $tin) {
$tdin[] = [
'Transaction_in_id' => $transaction_in1->id[$tin],
'DeviceType_id' => $transaction_in1->device_type_id[$tin],
'DeviceBrand_id' => $transaction_in1->device_brand_id[$tin],
'spek_device' => $transaction_in1->device_spec[$tin],
'harga_device' => $transaction_in1->price[$tin],
'jumlah_device' => $transaction_in1->amount[$tin],
'total_harga_device' => $transaction_in1->total_price[$tin]
];
Transaction_in_detail::insert($tdin);
}
在你的函数中去掉foreach,你可以直接向事务中插入数据详细table
public function store(Request $request)
{
...
$transaction_in->save();
for($i=0; $i < count($request->device_brand_id); $i++){
$tdin[] = array(
'Transaction_in_id' => $transaction_in->id,
'DeviceType_id' => $request->device_type_id[$i],
'DeviceBrand_id' => $request->device_brand_id[$i],
'spek_device' => $request->device_spec[$i],
'harga_device' => $request->price[$i],
'jumlah_device' => $request->amount[$i],
'total_harga_device' => $request->total_price[$i]
);
}
Transaction_in_detail::insert($tdin);
$transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);
return redirect('/transactionsin')->with('success', 'Transaction success');
}
我有一个带有动态 table 的表格,其中我可以 add/remove 行,我想将数据保存到 Transaction_in
和 Transaction_in_detail
table,当我将数据保存到 Transaction_in
时,table 会按预期保存,但不会保存 Transaction_in_detail
。
当我提交数据时,无论我在 table 中放入多少行 Transaction_in_detail
table 中保存的数据,总是给我 10 个所有空行。
店长
public function store(Request $request)
{
$request->validate([
'supplier_id' => 'required',
'transaction_in_date' => 'required|before_or_equal:today',
'device_type_id' => 'required',
'device_brand_id' => 'required',
'device_spec' => 'required|max:255',
'price' => 'required',
'amount' => 'required',
'total_price' => 'required',
'keterangan' => 'Nullable',
]);
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->input('supplier_id');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
foreach ($transaction_in as $tin) {
$tdin[] = [
'Transaction_in_id' => $transaction_in->id[$tin],
'DeviceType_id' => $transaction_in->device_type_id[$tin],
'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
'spek_device' => $transaction_in->device_spec[$tin],
'harga_device' => $transaction_in->price[$tin],
'jumlah_device' => $transaction_in->amount[$tin],
'total_harga_device' => $transaction_in->total_price[$tin]
];
Transaction_in_detail::insert($tdin);
}
$transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);
return redirect('/transactionsin')->with('success', 'Transaction success');
}
以下是 dd()
.
不知道错在哪里;这是模型。
Transaction_in型号
class Transaction_in extends Model
{
protected $guarded = [];
public function get_suppliers()
{
return $this->belongsTo(Supplier::class, 'Supplier_id');
}
public function get_devicetypes()
{
return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
}
public function get_devicebrands()
{
return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
}
}
Transaction_in_详细型号
class Transaction_in_detail extends Model
{
protected $guarded = [];
public function get_transction_in_id()
{
return $this->belongsTo(Transaction_in::class, 'Transaction_in_id');
}
public function get_devicetypes()
{
return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
}
public function get_devicebrands()
{
return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
}
}
表单在Transaction_in
视图中,Store Controller
来自transaction_inController
,DeviceType_id
和DeviceBrand_id
都是外键。
这是 Transaction_in
table 在数据库中的预期工作。
你的存储方法有点奇怪,这是我认为你应该做的:
public function store(Request $request)
{
$request->validate([
'supplier_id' => 'required',
'transaction_in_date' => 'required|before_or_equal:today',
'device_type_id' => 'required',
'device_brand_id' => 'required',
'device_spec' => 'required|max:255',
'price' => 'required',
'amount' => 'required',
'total_price' => 'required',
'keterangan' => 'Nullable',
]);
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->get('supplier_id');
$transaction_in->tanggal_transaksi = $request->get('transaction_in_date');
$transaction_in->save();
Transaction_in_detail::create([
'Transaction_in_id' => $transaction_in->id,
'DeviceType_id' => $request->get('device_type_id'),
'DeviceBrand_id' => $request->get('device_brand_id'),
'spek_device' => $request->get('device_spec'),
'harga_device' => $request->get('price'),
'jumlah_device' => $request->get('amount'),
'total_harga_device' => $request->get('total_price')
]);
$transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);
return redirect('/transactionsin')->with('success', 'Transaction success');
}
我认为所有 10 行都变为空,因为循环计算了 table 列的计数。
你的代码
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->input('supplier_id');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
foreach ( $transaction_in as $tin) {
$tdin[] = [
'Transaction_in_id' => $transaction_in->id[$tin],
'DeviceType_id' => $transaction_in->device_type_id[$tin],
'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
'spek_device' => $transaction_in->device_spec[$tin],
'harga_device' => $transaction_in->price[$tin],
'jumlah_device' => $transaction_in->amount[$tin],
'total_harga_device' => $transaction_in->total_price[$tin]
];
Transaction_in_detail::insert($tdin);
}
我的代码
$transaction_in = new Transaction_in();
$transaction_in->idTransaction_in = "0";
$transaction_in->Supplier_id = $request->input('supplier_id');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
$transaction_in1 = new Transaction_in();
foreach ( $transaction_in1 as $tin) {
$tdin[] = [
'Transaction_in_id' => $transaction_in1->id[$tin],
'DeviceType_id' => $transaction_in1->device_type_id[$tin],
'DeviceBrand_id' => $transaction_in1->device_brand_id[$tin],
'spek_device' => $transaction_in1->device_spec[$tin],
'harga_device' => $transaction_in1->price[$tin],
'jumlah_device' => $transaction_in1->amount[$tin],
'total_harga_device' => $transaction_in1->total_price[$tin]
];
Transaction_in_detail::insert($tdin);
}
在你的函数中去掉foreach,你可以直接向事务中插入数据详细table
public function store(Request $request)
{
...
$transaction_in->save();
for($i=0; $i < count($request->device_brand_id); $i++){
$tdin[] = array(
'Transaction_in_id' => $transaction_in->id,
'DeviceType_id' => $request->device_type_id[$i],
'DeviceBrand_id' => $request->device_brand_id[$i],
'spek_device' => $request->device_spec[$i],
'harga_device' => $request->price[$i],
'jumlah_device' => $request->amount[$i],
'total_harga_device' => $request->total_price[$i]
);
}
Transaction_in_detail::insert($tdin);
$transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);
return redirect('/transactionsin')->with('success', 'Transaction success');
}