0

アプリケーションには 2 種類のプロファイルがあり、それらは 2 つの異なるテーブルです。たとえば、個人プロファイルは「person」テーブルにあり、ID は「p」で始まります。ビジネス プロファイルは「business」テーブルにあり、ID は「b」で始まります。

投稿とプロフィールの間の関係を作成する「いいね」テーブルがあります。ただし、プロファイルは条件付きの関係です。profile_id が 'b' で始まる場合はビジネス モデルである必要があり、そうでない場合は 'Person' モデルである必要があります。

モデルのrelation()メソッドにif文を入れてみました。ただし、その段階ではプロパティが初期化されておらず、エラーが発生します。afterFind() と afterConstruct() を使用して、モデルのメタデータへの関係を追加しようとしました (CActiveRecordMetaData::addRelation() を使用)。afterFind または afterConstruct のいずれかでリレーションシップのタイプをエコーすると、それらはすべて本来あるべきものになります。しかし、何らかの理由で、いくつかの結果をループしてリレーションにアクセスしようとすると、それらはすべてビジネスとして識別されます。リレーションを追加した直後に CActiveRecord::refresh() を呼び出すと、100 個のネストされた関数呼び出しの制限に達したというエラーが表示されます。

この条件付き関係を実装するにはどうすればよいですか?

4

0 に答える 0