2015-07-17 6 views
0

Я использую необработанные запросы с laravel 4, Есть ли способ проверить затронутые строки на вставке?DB::getPdo()->rowCount(); дает мне "undefined method" error. Код выглядит следующим образом:Laravel Raw DB Insert Affected Rows

$query = "INSERT IGNORE INTO table (id) VALUES (?)"; 
$doQuery = DB::insert($query, array($value)); 
if ($doQuery) { 
    return DB::getPdo()->last(); 
} else { 
    return 0; 
} 

Если нет, то есть простой способ выяснить, был ли сделать вставку или нет, не делая его два запроса?

ответ

1

Вы можете использовать эту функцию:

INT affectingStatement (строка $ запрос, массив $ привязок = массив())

Запуск оператора SQL и получить номер затронутых строк.

Параметры

  • строка $ запрос
  • массив $ привязок

Возвращаемое значение

  • INT

Эта функция уже задокументирована для laravel 4.2, а также для 5.4.

Обратите внимание, что insert() является псевдонимом для statement() и возвращает логическое значение. Хотя функции update() и delete() являются псевдонимами для affectingStatement(). Поэтому, если вы хотите быть смешными и запутать рецензентов, вы также можете написать $rowCount = DB::delete("INSERT IGNORE ...", $bindings) - и это сработает.

2

Ну, я понял, что обходной путь должен быть таким же эффективным - используйте INSERT INTO вместо INSERT IGNORE INTO и используйте try/catch.

$query = "INSERT INTO table (id) VALUES (?)"; 
    try { 
     DB::insert($query, array($value)); 
     return 1; 
    } catch (\Exception $e) { 
     return 0; 
    } 
+0

Хорошее решение, ожидая увидеть, есть ли на этом пути разработки – koalaok

Смежные вопросы