私は単純な ORM ソリューションに取り組んでおり、トリッキーな状況に遭遇しました。理想的には、メソッドの呼び出し方法に応じて、静的コンテキストとオブジェクト コンテキストの両方でメソッドを使用できるようにしたいと考えています。これが可能かどうかはわかりませんが、私が言いたいことは次のとおりです。
User モデルが where() を静的に呼び出したいとします。これは現在正常に動作します。たとえば、次のようになります。
$user = User::where('id = ?', 3);
現在、関係もサポートしています。たとえば、ユーザーはメッセージを持つことができます。この関係が確立されたら、メッセージ モデルの空のコピーをユーザー モデルに格納し、外部キーを設定するだけです。例えば:
$user -> messages = new Message();
$user -> messages -> foreign_key = 'user_id';
さて、理想的には、次のように呼び出したいと思います:
$user -> messages -> where('unread = ?', 1);
非静的コンテキストでは、外部キーがユーザーの ID と一致するメッセージのみをプルするために、このコンテキストでは $this ->foreign_key を使用します。このタイプのコンテキスト切り替えは PHP で可能ですか? 静的コンテキストから $this を参照すると、静的メソッドとしてエラーがスローされ、$this に依存するべきではありません (明らかな理由から、静的コンテキストから呼び出された場合、$this は存在しません)。
これを回避する賢い方法はありますか?static キーワードの有無にかかわらず、2 つの異なるプロトタイプを持つようにメソッドをオーバーロードしようとしましたが、これにより再宣言エラーがスローされました。