使用create方法从laravel获取最后一个插入的id

时间:2017-10-26 14:52:52

标签: php mysql laravel laravel-5

我试图从使用以下代码调用的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');
    }


}

5 个答案:

答案 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
}