我试图从使用以下代码调用的Laravel控制器中获取最后一个插入的id ..
$invoiceData = array(
'client_id' => $request->get('client'),
'number' => $request->get('number'),
'invoice_date_entry' => date('Y-m-d', strtotime($request->get('invoice_date_entry'))),
'invoice_date' => date('Y-m-d', strtotime($request->get('invoice_date'))),
'due_date' => date('Y-m-d', strtotime($request->get('due_date'))),
'notes' => $request->get('notes'),
'terms' => $request->get('terms'),
'currency' => $request->get('currency'),
'status' => $request->get('status'),
'discount' => $request->get('discount') != '' ? $request->get('discount') : 0
);
$invoice = $this->invoice->create($invoiceData);
在上面执行的代码中,行被插入到数据库中,但不知怎的,我没有得到最后一个插入的id,
echo $invoice->id;
不知何故,我得到NULL
作为结果,
这是我的模特:
<?php namespace App\Models;
class Invoice extends BaseModel {
/**
* Main table primary key
* @var string
*/
protected $primaryKey = 'id';
/**
* @var array
*/
protected $fillable = ['client_id', 'number', 'invoice_date', 'due_date', 'status', 'discount', 'terms', 'notes', 'currency'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function client(){
return $this->belongsTo('App\Models\Client');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function items(){
return $this->hasMany('App\Models\InvoiceItem');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function payments(){
return $this->hasMany('App\Models\Payment');
}
}
答案 0 :(得分:1)
参考:docs
create
方法返回已保存的模型实例:
$flight = App\Flight::create(['name' => 'Flight 10']);
将返回Flight
模型的实例,以便您可以id
这样:
$insertedId = $flight->id;
所以在你的场景中,它应该是这样的:
$invoice = Invoice::create($invoiceData);
$insertedId = $invoice->id;
答案 1 :(得分:0)
创建模型时,您已经拥有最后一个元素。 实施例。
$data = array(
'client_id' => $request->get('client'),
'number' => $request->get('number'),
'invoice_date_entry' => date('Y-m-d', strtotime($request->get('invoice_date_entry'))),
'invoice_date' => date('Y-m-d', strtotime($request->get('invoice_date'))),
'due_date' => date('Y-m-d', strtotime($request->get('due_date'))),
'notes' => $request->get('notes'),
'terms' => $request->get('terms'),
'currency' => $request->get('currency'),
'status' => $request->get('status'),
'discount' => $request->get('discount') != '' ? $request->get('discount') : 0
);
$newModel = Invoice::create($data);
您可以$newModel->id
获取最后一个模型的ID。
如果你在模型中,可以用静态方法调用它。
self::create($data);
所以你必须调用静态方法Invoice::create($data)
而不是$this->invoice->create($data)
;
答案 2 :(得分:0)
您的代码不正确。你应该写这个:
$invoiceData = array(
'client_id' => $request->get('client'),
'number' => $request->get('number'),
'invoice_date_entry' => date('Y-m-d', strtotime($request->get('invoice_date_entry'))),
'invoice_date' => date('Y-m-d', strtotime($request->get('invoice_date'))),
'due_date' => date('Y-m-d', strtotime($request->get('due_date'))),
'notes' => $request->get('notes'),
'terms' => $request->get('terms'),
'currency' => $request->get('currency'),
'status' => $request->get('status'),
'discount' => $request->get('discount') != '' ? $request->get('discount') : 0
);
$invoice = Invoice::create($data);
答案 3 :(得分:0)
我猜你可以使用方便的方法insertGetId()
。
$last_inserted_id = Invoice::insertGetId($data);
这将直接为您提供最后插入的ID。
答案 4 :(得分:0)
我建议稍微清理你的代码。如果您有多个模型,更容易将记录插入表格并节省更多时间。
public function createInvoice(CreateInvoiceRequest $request){
$invoice = new App\Invoice(); // or $invoice = new Invoice();
foreach($request->except('_token') as $key=>$value){
if($key == "something"){
// Mutate $value if required
}
$invoice->setAttribute($key, $value);
}
$invoice->save();
return $invoice->id; // this is the id you need
}