Laravel 4 - 返回当前插入的id

时间:2013-06-17 03:15:39

标签: laravel laravel-4

我有以下查询

public static function createConversation( $toUserId )
{

    $now = date('Y-m-d H:i:s');
    $currentId = Auth::user()->id;

    $results = DB::table('pm_conversations')->insert(
        array( 'user_one' => $currentId, 'user_two' => $toUserId, 'ip' => Request::getClientIp(), 'time' => $now )
    );

    return $results;

}

我如何返回刚刚插入的行的id?

干杯,

4 个答案:

答案 0 :(得分:13)

为什么不创建模型......而不是做原始查询...

称之为对话,或其他......

然后你可以做....

 $result = Conversation::create(array( 'user_one' => $currentId, 'user_two' => $toUserId, 'ip' => Request::getClientIp(), 'time' => $now ))->id;

将返回一个id ...

或者如果您使用的是Laravel 4,则可以使用insertGetId方法...在Laravel 3中,我相信它的insert_get_id()

 $results = DB::table('pm_conversations')->insertGetId(
    array( 'user_one' => $currentId, 'user_two' => $toUserId, 'ip' => Request::getClientIp(), 'time' => $now )
);

此方法要求表的id自动递增,因此请注意......

最后一个方法是,你可以只返回最后插入的mysql对象....

像这样...

 $result = DB::connection('mysql')->pdo->lastInsertId();

所以如果你选择了最后一条路......

它会去...

public static function createConversation( $toUserId )
 {

$now = date('Y-m-d H:i:s');
$currentId = Auth::user()->id;

$results = DB::table('pm_conversations')->insert(
    array( 'user_one' => $currentId, 'user_two' => $toUserId, 'ip' => Request::getClientIp(), 'time' => $now )
 );


 $theid= DB::connection('mysql')->pdo->lastInsertId();
 return $theid;

 }

我个人会选择第一种创建实际模型的方法。这样,您实际上可以拥有相关项目的对象。 然后,而不是创建一个模型,只需保存()....你将调用YourModel :: create(),并返回最新模型创建的id

答案 1 :(得分:13)

您可以使用DB::getPdo()->lastInsertId()

答案 2 :(得分:10)

使用Eloquent你可以做到:

$new = Conversation();
$new->currentId = $currentId;
$new->toUserId = $toUserId;
$new->ip = Request::getClientIp();
$new->time = $now;

$new->save();

$the_id = $new->id; //the id of created row

答案 3 :(得分:0)

我使用它的方式是我运行了一个insert语句,然后我返回了插入的行ID(这是从一个自学项目到发票):

        WorkOrder::create(array(
        'cust_id' => $c_id,
        'date' => Input::get('date'),
        'invoice' => Input::get('invoice'),
        'qty' => Input::get('qty'),
        'description' => Input::get('description'),
        'unit_price' => Input::get('unit_price'),
        'line_total' => Input::get('line_total'),
        'notes'     => Input::get('notes'),
        'total' => Input::get('total')
    ));

    $w_id = WorkOrder::where('cust_id', '=', $c_id)->pluck('w_order_id');
    return $w_id;