今日、thinkphp6 モデルを使用しているときに問題が発生しました。つまり、データの作成時にモデルが ID を返さなかったのです。これは私を非常に混乱させます。なぜなら、私の以前の開発経験では、後続の操作のためのデータを作成するときに通常 ID が返されるからです。この投稿では、この問題の原因をどのように発見し、それを修正する方法を共有します。
まず、コードをチェックして、モデル作成メソッドが正しく使用されていることを確認しました。私のコードは次のとおりです。
$user = new User(); $user->name = 'John'; $user->email = 'john@example.com'; $user->save(); return $user->id;
このコードは、モデルの save() メソッドを呼び出し、新しく作成されたデータ行の ID を返すため、問題なく見えるはずです。ただし、コードを実行すると、返される ID は期待していたものではなく、0 であることがわかりました。私は長い間 thinkphp フレームワークを使用してきましたが、この問題が発生したことがないため、これには非常に混乱しています。
次に、モデルのソース コード、特に save() メソッドの実装を調べました。モデルの save() メソッドは、保存する前に create() メソッドを呼び出して新しいデータ行を作成することによって実装されていることがわかりました。
public function save($data = [], $where = [], $sequence = null) { if ($this->isExists()) { return $this->update($data, $where, $sequence); } else { $result = $this->create($data); if ($result) { $this->sync($result); } return $result; } }
データが作成されるときに、モデルが create( ) 方法。次に、create() メソッドの実装をチェックして、新しく作成されたデータ行の ID が正しく返されるかどうかを確認します。
public function create($data = [], $sequence = null) { if (empty($data)) { $data = $this->getOriginData(); } $result = $this->db()->insertGetId($data, $sequence); if (!empty($result)) { $this->exists(true); $this->setRawData([], true); $this->sync($result); $this->trigger('after_create'); return $result; } else { return false; } }
create() メソッドのコードを注意深く観察すると、新しく作成されたデータ行の ID が返されることがわかりました。だから問題は何ですか?
最後に、データベースのテーブル構造を確認し、テーブルの ID フィールドが自動インクリメント列として正しく設定されているかどうかを確認しました。その結果、問題はここにあることがわかりました。ID フィールドが自動インクリメント列として設定されていません。
この質問はばかばかしいと同時に恥ずかしいものですが、理由は非常に単純です。ただし、これは、モデルを使用するときにデータベース テーブルの構造を注意深くチェックして、正しく構成されていることを確認する必要があるという事実も示しています。この方法によってのみ、モデルを正しく使用し、不要な問題を回避することができます。
私の場合、ID フィールドを自動インクリメント列に設定し、コードを再実行して、新しく作成されたデータ行の ID を正しく返しました。この問題が解決された後、データ作成時に返される ID 値がデータベースの自動インクリメント列機能に基づいていることに気付きました。
この投稿では、小さな問題をどのように発見したかについての私の経験を共有します。この問題の根本的な原因は、データベースのテーブル構造が正しく構成されていないため、データの作成時にモデルが ID を返さないことです。コードを注意深くチェックし、モデルのソース コードを確認し、データベースのテーブル構造を確認することで、最終的に問題を解決しました。私の経験が、他の開発者が thinkphp6 フレームワーク モデルをより深く理解し、この強力なツールを Web アプリケーション開発にうまく活用できるようになることを願っています。
以上がthinkphp6 モデルが ID を返さないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。