web-dev-qa-db-ja.com

CakePHP 3.0で最後の挿入IDを取得するにはどうすればよいですか?

CakePHP 3.0ベータでの作業は、単純な問題のように思えますが、ドキュメントを検索しましたが、何も見つかりません。 $ this-> Model-> save()を使用して新しいレコードを挿入した後、新しく作成されたレコードのauto_increment主キーIDを取得したいと思います。

Cake 2.xでは、次のことができました。

$record_id=$this->ModelName->id;

または

$record_id=$this->ModelName->getLastInsertID();

ただし、これらのどちらもCakePHP 3.0では動作しないようです。

ありがとう

19
ben921

他の誰かがこれに遭遇した場合、最終的に答えを見つけました:

$result=$this->ModelName->save($whatever);
$record_id=$result->id;
30
ben921

cakephp3.Xに私はこれを見つけました:

if ($articlesTable->save($article)) {
    // The $article entity contains the id now
    $id = $article->id;
}

http://book.cakephp.org/3.0/en/orm/saving-data.html#inserting-data

14

この問題は次の方法で解決できます。

CakePHP 3.xの場合

$result = $this->ModelName->save($this->request->data);
$insertedId = $result->id;

CakePHP 2.xの場合

$this->ModelName->save($this->request->data);
$insertedId = $this->ModelName->getLastInsertId();
4
Faisal
$result=$this->ModelName->find('all',['fields'='id'])->last();

$record_id=$result->id;
2
Naresh Dudhat

これらは実際のORMモデルで機能します。

$result = $this->Model->save($data);
$id = $result->id;
1
Manuel

新しく作成された登録cakePHP 3.xの識別子を取得するのは非常に簡単です。エンティティが適切に保存されているかどうかを確認するだけです。そうでない場合、識別子にアクセスできません。コードはとてもシンプルです

$this->loadModel('ModelName');
$newEntity = $this->ModelName->newEntity();

そのため、モデルをロードして新しいレコードを宣言した後、保存する前にエンティティに値を設定できます。たとえば、投稿リクエストの場合、次のことができます。

フィールドごとにフィールドを進めるには:

$newEntity->name = $this->request->getData('name');

または(cakePHPバージョンによると、最初の例は最近のバージョンのものです)

$newEntity->name = $this->request->data('name');

それ以外の場合、この場合、フォーム内のフィールドの名前属性は、データベース内のエンティティの属性と同一である必要があります。

$newEntity = $this->ModalName->patchEntity($newEntity, $this->request->getData());

そして、エンティティの準備ができたら、データベースに登録されている場合にのみ、その識別子にアクセスできます。

最後のレコードのIDを取得するためのソリューションは、これを行う必要があります:

if($this->ModalName->save($newEntity) {
  //you can get ID here
  $id = $newEntity->id;
}

役に立つことを願っています。

1
soumare

私はこれを機能させる前にかなり長い間苦労してきました。 saveメソッドは、エンティティIDがまだ設定されていない限り、最後の挿入IDでエンティティを更新します。 新しいレコードを作成していて、エンティティIDがゼロに設定されている場合、saveメソッドはそれを更新しないため、エンティティIDが設定されていないことを確認してください

$table = TableRegistry::get('MyModel');
$record = $table->newEntity($data);

// Unset the id if present and set to zero:
if (isset($record->id) && ($record->id==0)){
  unset($record->id);
}

if ($saved = $table->save($record)){
  $id = $record->id; // get the last insert id
}
0
Franz

CakePHP 3.0で

$statement  = $query1->insert("columns of milestone");
$id =  $statement->lastInsertId('Milestones'); //Here it will return the last insert id

[〜#〜] note [〜#〜]マイルストーンはテーブルの名前です

0
Pankaj Sharma