поместите одну строку в переменную и удалите ее одним запросом - PullRequest
0 голосов
/ 26 марта 2019

У меня есть таблица password_resets в базе данных mysql, и я хочу получить один ряд данных и удалить его одним запросом в Lumen с DB фасадом, подобным этому:

$reset_row = DB::table('password_resets')->where('token', $request->token)->first()->delete();

Но у меня есть ошибка:

Call to undefined method stdClass::delete()

Я пытаюсь этот код:

  $reset_row = DB::table('password_resets')->where('token', $request->token)
  //do my work whith $reset_row->first();
  $reset_row->delete();

Но я думаю, что этот способ использует 2 запроса, чтобы сделать эту работу.

ПРИМЕЧАНИЕ : я знаю, что не могу удалить, и причина в том, что first() метод) возвращает его в массив)

Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

Вы можете просто связать метод удаления с вашим Query Buider.Не нужно выбирать первое, так как вы хотите удалить их, не выбирайте их.

DB::table('password_resets')->where('token', $request->token)->delete();

Его уже ответили в другом сообщении в StackOverflow.

Вы можетеиспользуйте этот ответ тоже laravel-delete-query-builder , и вы также можете посмотреть официальную документацию о удалении с помощью построителя запросов

0 голосов
/ 26 марта 2019

В конце я думаю создать модель для сброса пароля и использовать ее так:

1. установить первичный ключ в токен, установив его на модели, например this

2. использовать метод поиска для поиска токена ( документ для метода поиска )

используйте этот способ:

$reset=PasswordReset::find($token);
//work with $reset
$reset->delete()

ПРИМЕЧАНИЕ: : для установки первичного ключа в строку col см. Эту ссылку тоже

0 голосов
/ 26 марта 2019

На самом деле не нужно использовать -> первый (). Bcz ваш токен уникален.

если вам нужно попробовать это.

$reset_row = DB::table('password_resets')->where('token', $request->token)
    ->Limit(1)->delete();

Я думаю, что можно использовать "limit" с "delete".

...