Я выполняю операцию с базой данных с «Eloquent ORM in Laravel». Я просто хочу взять последний идентификатор вставки (не максимальный id) в базе данных.
Я искал, чтобы получить последний идентификатор в laravel Eloquent ORM, я получил следующую ссылку ( Laravel, получите последний идентификатор вставки с использованием Eloquent ), который ссылается на получение последнего идентификатора вставки из следующей функции « $data->save()
».
Но мне нужно получить
« Model::create($data)
»;
Мой запрос:
GeneralSettingModel::create($GeneralData); User::create($loginuserdata);
Как я могу получить последний вставленный идентификатор?
Как и в документах: Вставка, обновление, удаление
«Вы также можете использовать метод create для сохранения новой модели в одной строке. Экземпляр вставленной модели будет возвращен вам из метода . Однако перед этим вам нужно будет указать либо заполняемый, либо защищенный атрибут на поскольку все модели Eloquent защищают от массового присвоения.
После сохранения или создания новой модели, использующей автоматически увеличивающиеся идентификаторы, вы можете получить идентификатор, обратившись к атрибуту id объекта:
$insertedId = $user->id;
Итак, в вашем примере:
$user = User::create($loginuserdata); $insertedId = $user->id;
то на столе2 это будет
$input['table2_id'] = $insertedId; table2::create($input);
**** Для Laravel ****
$user = new User(); $user->name = 'John'; $user->save(); //Getting Last inserted id $insertedId = $user->id;
$lastId = User::create($loginuserdata)->id;
Вы можете обернуть ваши данные в методе insertGetId (), как это
$id = DB::table('table')->insertGetId( $data );
В этом случае данные массива $ будут выглядеть примерно так
$data = [ 'field' => 'data' , 'field' => 'data' ];
и если вы используете фасад DB, вы можете просто добавить метод lastInsertID () к вашему запросу.
$lastInsertedID = DB::table('table')->insert( $data )->lastInsertId();
Как говорили другие, вы можете получить идентификатор, используя
$model->id;
но только если вы используете стандартное соглашение об именах для красноречивого. Если вы хотите использовать другое имя для столбца primaryKey, например:
class Users extends Model{ $primaryKey = 'userid'; }
вы можете получить последний вставленный идентификатор, вызвав
$model->userid;
Он описан в: https://laravel.com/docs/master/eloquent#eloquent-model-conventions, где можно найти:
Eloquent также предположит, что каждая таблица имеет столбец первичного ключа с именем id. Вы можете определить свойство $ primaryKey, чтобы переопределить это соглашение.
Кроме того, Eloquent предполагает, что первичный ключ представляет собой увеличивающееся целочисленное значение, что означает, что по умолчанию первичный ключ будет автоматически передаваться в int. Если вы хотите использовать неинкрементный или нечисловой первичный ключ, вы должны установить для общедоступного свойства $ incrementing на вашей модели значение false.
Вы можете сделать это как,
public function store(Request $request,ModelName $obj) { $lastInsertedId = $obj->create($request->all())->id; }
Надеюсь, что это поможет вам.
$user = (new user)->create($request->all()) ; \Session::flash('message', 'Thanks , Your record No (' .$user->id . ') has been Successfully added');
Это мой способ сделать это, я возвращаю вставленный объект, затем получаю его идентификатор или любое другое свойство.
легкий и полный
Этот код отлично работает для меня: Laravel 5.3
$upstatus = User::create($status); return response()->json($upstatus);
Страница пользователя / сайт i был вызовом data.id
Красноречивая модель
$user = new Reports(); $user->email= 'david@example.com'; $user->save(); $lastInsertId = $user->id;
Использование Query Builder
$lastInsertId = DB::table('reports')->insertGetId(['email' => 'david@example.com']);