我可以在 facadesdb 插入中获取主键以供直接使用 - Laravel 8
Can I get the primary key inside the facadesdb insert for direct use - Laravel 8
我正在学习 Laravel 8 并且遇到了这个问题。因此,我制作了一个具有 FacadesDB Insert 功能的控制器 class。这是我的代码:
public function aksimenulis_laporan(Request $request){
$filefoto = $request->foto;
DB::table('pengaduan')->insert([
'tgl_pengaduan' => date('Y-m-d'),
'nik' => $_POST['nik'],
'isi_laporan' => $_POST['isi_laporan'],
'foto' => $filefoto->getClientOriginalName(),
'status' => '0',
]);
// isi dengan nama folder tempat kemana file diupload
$tujuan_upload = storage_path();
// upload file
$filefoto->move($tujuan_upload,$filefoto->getClientOriginalName());
return redirect('');
}
https://i.stack.imgur.com/VTJyS.png
这是我的数据库 table 结构。
我正在尝试插入 'foto' 的值为 'id_pengaduan' 或主键,就像使用此代码一样。这将是 PrimaryKey_OriginalFileName
'foto' => $filefoto-> 'id_pengaduan'.'_'.getClientOriginalName(),
但是这个问题我还没有值。有没有一种方法可以用 table 的主键值 'foto'?
可以使用insertGetId方法插入一条记录,然后取回ID:
$pengaduan_id= DB::table('pengaduan')->insertGetId([
'tgl_pengaduan' => date('Y-m-d'),
'nik' => $_POST['nik'],
'isi_laporan' => $_POST['isi_laporan'],
'status' => '0',
]);
DB::table('pengaduan')->where('id',$pengaduan_id)->update(['foto'=>$filefoto->getClientOriginalName()]);
插入操作完成前无法获取id
你也应该在 transaction 中这样做,但现在,我会保持这种方式。
您不能(也不应该)插入一行并定义其主键。这就是主键的全部目的。你让 SQL 管理它的标识符,这很好以防出现错误,因此主键中没有重复项。
我将进入 eloquent,因为您是在 Laravel 开始新的,这将使您的数据库操作更轻松。
首先,您需要为 table 制作一个新模型。您可以使用控制台命令执行此操作:
php artisan make:model ModelName
之后,导航到您的模型目录 (app/Models/),您将找到新模型 ModelName.php
在那里,您需要指定 table 名称和主键。你可以用这两行来做到这一点:
protected $table = 'pengaduan';
protected $guarded = ['id_pengaduan'];
您的模型现在应该看起来像
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ModelName extends Model
{
use HasFactory;
protected $table = 'pengaduan';
protected $guarded = ['id_pengaduan'];
}
保存,您可能需要清除缓存。在控制台中 运行ning php artisan optimize
执行此操作。
将数据插入新行后,您可以像这样获取分配给该行的主键:
//using eloquent
use App\Models\ModelName;
//insert data
$insertRow = new Pengaduan;
$insertRow->tgl_pengaduan = date('Y-m-d');
$insertRow->nik = $_POST['nik'];
$insertRow->isi_laporan= $_POST['isi_laporan'];
$insertRow->foto = $filefoto->getClientOriginalName();
$insertRow->status = 0;
$insertRow->save();
//get key here
$rowId = $insertRow->pengaduan_id;
如果您想使用DB::table('table')->insert
方法,请参阅OMR的回答。
如果您真的想要自己定义主键,那么您必须运行在table:
SET IDENTITY_INSERT [Tablename] ON;
您可以阅读更多相关内容 on this thread。
我正在学习 Laravel 8 并且遇到了这个问题。因此,我制作了一个具有 FacadesDB Insert 功能的控制器 class。这是我的代码:
public function aksimenulis_laporan(Request $request){
$filefoto = $request->foto;
DB::table('pengaduan')->insert([
'tgl_pengaduan' => date('Y-m-d'),
'nik' => $_POST['nik'],
'isi_laporan' => $_POST['isi_laporan'],
'foto' => $filefoto->getClientOriginalName(),
'status' => '0',
]);
// isi dengan nama folder tempat kemana file diupload
$tujuan_upload = storage_path();
// upload file
$filefoto->move($tujuan_upload,$filefoto->getClientOriginalName());
return redirect('');
}
https://i.stack.imgur.com/VTJyS.png 这是我的数据库 table 结构。
我正在尝试插入 'foto' 的值为 'id_pengaduan' 或主键,就像使用此代码一样。这将是 PrimaryKey_OriginalFileName
'foto' => $filefoto-> 'id_pengaduan'.'_'.getClientOriginalName(),
但是这个问题我还没有值。有没有一种方法可以用 table 的主键值 'foto'?
可以使用insertGetId方法插入一条记录,然后取回ID:
$pengaduan_id= DB::table('pengaduan')->insertGetId([
'tgl_pengaduan' => date('Y-m-d'),
'nik' => $_POST['nik'],
'isi_laporan' => $_POST['isi_laporan'],
'status' => '0',
]);
DB::table('pengaduan')->where('id',$pengaduan_id)->update(['foto'=>$filefoto->getClientOriginalName()]);
插入操作完成前无法获取id
你也应该在 transaction 中这样做,但现在,我会保持这种方式。
您不能(也不应该)插入一行并定义其主键。这就是主键的全部目的。你让 SQL 管理它的标识符,这很好以防出现错误,因此主键中没有重复项。
我将进入 eloquent,因为您是在 Laravel 开始新的,这将使您的数据库操作更轻松。
首先,您需要为 table 制作一个新模型。您可以使用控制台命令执行此操作:
php artisan make:model ModelName
之后,导航到您的模型目录 (app/Models/),您将找到新模型 ModelName.php
在那里,您需要指定 table 名称和主键。你可以用这两行来做到这一点:
protected $table = 'pengaduan';
protected $guarded = ['id_pengaduan'];
您的模型现在应该看起来像
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ModelName extends Model
{
use HasFactory;
protected $table = 'pengaduan';
protected $guarded = ['id_pengaduan'];
}
保存,您可能需要清除缓存。在控制台中 运行ning php artisan optimize
执行此操作。
将数据插入新行后,您可以像这样获取分配给该行的主键:
//using eloquent
use App\Models\ModelName;
//insert data
$insertRow = new Pengaduan;
$insertRow->tgl_pengaduan = date('Y-m-d');
$insertRow->nik = $_POST['nik'];
$insertRow->isi_laporan= $_POST['isi_laporan'];
$insertRow->foto = $filefoto->getClientOriginalName();
$insertRow->status = 0;
$insertRow->save();
//get key here
$rowId = $insertRow->pengaduan_id;
如果您想使用DB::table('table')->insert
方法,请参阅OMR的回答。
如果您真的想要自己定义主键,那么您必须运行在table:
SET IDENTITY_INSERT [Tablename] ON;
您可以阅读更多相关内容 on this thread。