Laravel, получить последний идентификатор вставки с помощью Eloquent



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



public function saveDetailsCompany()
{
$post = Input::All();

$data = new Company;

$data->nombre = $post['name'];
$data->direccion = $post['address'];
$data->telefono = $post['phone'];
$data->email = $post['email'];
$data->giro = $post['type'];
$data->fecha_registro = date("Y-m-d H:i:s");
$data->fecha_modificacion = date("Y-m-d H:i:s");

if($data->save()) {
return Response::json(array('success' => true), 200);
}
}


и я хочу вернуть последний ID вставленной, но я не знаю как его получить.



С уважением!

863   22  

22 ответов:

после save,$data->id должен быть вставлен последний идентификатор.

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

для обновленной версии laravel попробуйте это

return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);

xdazz правильно в этом случае, но в интересах будущих посетителей, которые могут использовать DB::statement или DB::insert, есть еще один способ:

DB::getPdo()->lastInsertId();

для тех, кто также любит, как Джеффри способ использует Model::create() в его учебниках Laracasts 5, где он просто отправляет запрос прямо в базу данных, явно не устанавливая каждое поле в контроллере и используя модель $fillable для массового назначения (очень важно, для любого нового и использующего этот способ): я читаю много людей, использующих insertGetId() но, к сожалению, это не уважать $fillable белый список, так что вы получите ошибки с ним, пытаясь вставить _token и все, что не является поле в базе данных, в конечном итоге все нужно фильтровать и т. д. Это меня расстроило, потому что я хочу использовать массовое назначение и в целом писать меньше кода, когда это возможно. К счастью красноречивых create метод просто обертывает метод сохранения (что @xdazz цитируется выше), так что вы все еще можете вытащить последний созданный идентификатор...

public function store() {

    $input = Request::all();
    $id = Company::create($input)->id;

    return redirect('company/'.$id);
}

если таблица имеет автоматически увеличивающийся идентификатор, используйте метод insertGetId для вставки записи, а затем извлеките идентификатор:

$id = DB::table('users')->insertGetId([
    'email' => '[email protected]',
    'votes' => 0
]);

см.:https://laravel.com/docs/5.1/queries#inserts

* * * * Для Laravel****

сначала создайте объект, затем установите значение атрибутов для этого объекта, затем сохраните запись объекта, а затем получите последний вставленный идентификатор. например,

$user = new User();        

$user->name = 'John';  

$user->save();

// теперь получаем последний вставленный id

$insertedId = $user->id;

echo $insertedId ;

в laravel 5: Вы можете сделать это:

use App\Http\Requests\UserStoreRequest;
class UserController extends Controller {
    private $user;
    public function  __construct( User $user )
    {
        $this->user = $user;
    }
    public function store( UserStoreRequest $request )
    {
       $user= $this->user->create([
            'name'              => $request['name'],
            'email'             => $request['email'],
            'password'          => Hash::make($request['password'])
        ]);
        $lastInsertedId= $user->id;
    }
}

вот пример:

public static function saveTutorial(){

    $data = Input::all();

    $Tut = new Tutorial;
    $Tut->title = $data['title'];
    $Tut->tutorial = $data['tutorial'];   
    $Tut->save();
    $LastInsertId = $Tut->id;

    return Response::json(array('success' => true,'last_id'=>$LastInsertId), 200);
}

вот как мы можем получить последний вставленный идентификатор в Laravel 4

public function store()
{
    $input = Input::all();

    $validation = Validator::make($input, user::$rules);

    if ($validation->passes())
    {

     $user= $this->user->create(array(
            'name'              => Input::get('name'),
            'email'             => Input::get('email'),
            'password'          => Hash::make(Input::get('password')),
        ));
        $lastInsertedId= $user->id; //get last inserted record's user id value
        $userId= array('user_id'=>$lastInsertedId); //put this value equal to datatable column name where it will be saved
        $user->update($userId); //update newly created record by storing the value of last inserted id
            return Redirect::route('users.index');
        }
    return Redirect::route('users.create')->withInput()->withErrors($validation)->with('message', 'There were validation errors.');
    }

это сработало для меня в laravel 4.2

$id = User::insertGetId([
    'username' => Input::get('username'),
    'password' => Hash::make('password'),
    'active'   => 0
]);

использовать insertGetId вставить и вставляешь id в то же время

С doc

если таблица имеет идентификатор автоматического увеличения, используйте метод insertGetId чтобы вставить запись и затем получить идентификатор:

By Model

$id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

By DB

$id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

для более подробной информации:https://laravel.com/docs/5.5/queries#inserts

после сохранения модели, инициализированный экземпляр имеет код:

$report = new Report();
$report->user_id = $request->user_id;
$report->patient_id = $request->patient_id;
$report->diseases_id = $request->modality;
$isReportCreated = $report->save();
return $report->id;  // this will return the saved report id

после экономия запись в базе данных, вы можете получить доступ к id by $data->id

return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)

в Laravel 5.2 я бы сделал его как можно более чистым:

public function saveContact(Request $request, Contact $contact)
{
   $create = $contact->create($request->all());
   return response()->json($create->id,  201);
}

для Laravel, если вы вставляете новую запись и вызываете $data->save() эта функция выполняет запрос INSERT и возвращает значение первичного ключа (т. е. id по умолчанию).

Вы можете использовать следующий код:

if($data->save()) {
    return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
}

после

$data->save()

$data->id даст вам вставленный идентификатор,

Примечание: если имя столбца автоинкремента СНО затем вы должны использовать $data->sno, а не $data->id

вы можете сделать это:

$result=app('db')->insert("INSERT INTO table...");

$lastInsertId=app('db')->getPdo()->lastInsertId();
$objPost = new Post;
$objPost->title = 'Title';
$objPost->description = 'Description';   
$objPost->save();
$recId = $objPost->id; // If Id in table column name if other then id then user the other column name

return Response::json(['success' => true,'id' => $recId], 200);

Используя Красноречивую Модель

$user = new Report();        
$user->email= '[email protected]';  
$user->save();
$lastId = $user->id;

С Помощью Построителя Запросов

$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);

для получения последнего вставленного идентификатора в базе данных Вы можете использовать

$data = new YourModelName;
$data->name = 'Some Value';
$data->email = '[email protected]';
$data->save();
$lastInsertedId = $data->id;

здесь $lastInsertedId даст вам последний вставленный идентификатор автоматического приращения.

После Сохранения $data->save(). все данные помещаются внутрь $data. Так как это объект и текущая строка только что сохранена внутри $data. так что последний insertId будет находится внутри $data->id.

код ответа будет:

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
public function store( UserStoreRequest $request ) {
    $input = $request->all();
    $user = User::create($input);
    $userId=$user->id 
}

Используя Красноречивую Модель

use App\Company;

public function saveDetailsCompany(Request $request)
{

$createcompany=Company::create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]);

// Last Inserted Row ID

echo $createcompany->id;

}

С Помощью Построителя Запросов

$createcompany=DB::table('company')->create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]);

echo $createcompany->id;

для получения дополнительных методов последнего вставленного идентификатора строки в Laravel : http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

Comments

    Ничего не найдено.