2013-06-17 4 views
7

Я следующий запрос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; 

} 

Как бы я вернуть идентификатор строки только что вставили?

Приветствия,

+0

DB :: getPdo() -> lastInsertId() – jrsalunga

ответ

13

Вместо того чтобы делать необработанный запрос, почему бы не создать модель ...

Называйте это разговор, или что-то ...

И тогда вы можете просто сделать .. ..

$result = Conversation::create(array('user_one' => $currentId, 'user_two' => $toUserId, 'ip' => Request::getClientIp(), 'time' => $now))->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) 
); 

Этот метод требует, чтобы идентификатор таблицы будет Автоинкрементный, так что следите за что ...

последний метод, является то, что вы можете просто вернуть последний вставленный объект 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; 

} 

Я бы лично выбрать первый метод создания фактической модели. Таким образом, вы можете иметь объекты рассматриваемого предмета. Затем вместо того, чтобы создавать модель и просто сохранять() .... вы вызываете MyModel :: create(), и это вернет идентификатор последней модели.

+0

Я использую Laravel 4 ... Я просто try'd меняется -> вставить в -> insertGetId и оставил все то же самое, но оно не возвращение id ... Есть ли что-то помимо результатов возврата $, которые мне нужно делать? – BigJobbies

+0

Как я уже упоминал, является ли идентификатор таблицы бесед, автоматически увеличивая? Этот метод предполагает, что в противном случае самый безопасный способ - просто вернуть последнюю вставку PDO непосредственно из mysql – KyleK

+0

Что произойдет, когда вы var_dump ($ results) перед тем, как вернуть его? Что он показывает – KyleK

13

Вы можете использовать DB::getPdo()->lastInsertId().

+0

Я думаю, что это лучший способ ** Спасибо **, Что такое getPdo() – M98

10

Использование красноречивого вы можете сделать:

$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 
0

так, как я сделал это работа, я побежал оператор вставки, а затем я вернулся вставленная строка 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; 
Смежные вопросы