web-dev-qa-db-ja.com

INSERTクエリが成功した後に生成されたIDを取得するにはどうすればよいですか?

JTable-Operationで最後に保存されたデータセットのidを取得したいと思います。

現時点で私はこれを得ました:

// Create and populate an object.
$value         = new stdClass();
$value->userid = (int)$userid;
$value->type   = $data['type']; 

// Insert the object into the user profile table.
$handle = JFactory::getDbo()->insertObject('#__bestia_handles', $value);

次に、この保存されたオブジェクトのidを取得します。

$handleにはtrueまたはfalseのみが含まれます。

この問題を解決するにはどうすればよいですか?

1
MyFault

解決しました:-)

定義するだけ

$db                         =   JFactory::getDbo();

以降

$db->insertObject(...)

電話できます

$db->insertid();
2
MyFault

私のデータに複数のテーブルを使用してそれらをリンクしているのと同じ問題がありますが、これは良い方法のようですが、JTableのsaveメソッドがtrue/falseしか返さない理由がありますアイテムIDまたはNULLを返す方がはるかに便利であるため、確かにそれを返す方が良いでしょう。もちろん、自分のテーブルクラスでオーバーライドを作成してこれを行うのを止めることは何もないと思います...

    MyComponentTableMyTable extends JTable
    {
        public function save($src, $orderingFilter= '', $ignore= '')
        {
            /*call parent save function and return either insertid or null depending on whether or not parent save function returns true or false */
            return ( parent::save ( $src, $orderingFilter, $ignore ) ? $_db->insertid () : NULL ) ;
        }
    }

実際にはまだ試していませんが、うまくいかない理由はわかりません。

0
TheKLF99

1行のデータを処理する場合は、JTableを使用してみてください。これは、Active Recordパターンに従います。 $row->save()を実行した後、$row->idは、主キーの実際の値で更新されます。

0
Chris