0

beforeFind(の子クラスで )を使用する必要がありCActiveRecordます。

基本的には、DB で実際に検索を実行する前に、いくつかのデータを変換する必要があります。

内部で行われる直前の検索操作を変更するにはどうすればよいbeforeFind()ですか? 属性をいじって$thisも役に立ちません。データが取り込まれていないためです。これは少し驚きです。ドキュメントで「隠し CDbCriteria パラメータ」について言及されているのを見てきましたが、その使用方法を推測できませんでした... . 残念ながら、このテーマに関するドキュメントはわずかです。

私がしなければならないことはかなり単純です: IP アドレスを格納するためのテーブル列があります。スケーラビリティの観点から最も効率的な設計は、列に VARBINARY(16) データ型を使用することです。たとえば、これに関するこのSO 質問ページ (および回答) を参照してください。したがって、最もクリーンな解決策は、ユーザーに対して透過的に機能することbeforeFind()ですafterFind()beforeSave()

コード スタックでは、IP アドレスは通常のドットで区切られたクワッドであり、DB レベルでは、inet_pton()フック メソッドの後/前に PHP のメソッドを利用した後にフィールドに入るすべてのものです。

かっこいいはずだった。そしてそれはクールです - と を使用するafterFind()beforeSave()、オブジェクトの ip_address 属性が手元にあり、私の超操作力に翻弄されます。

ここに要点と必要性があります: 問題は、 でそれを達成する方法がわからないということですbeforeFind()mergeWith()ip_address 属性が元の基準の一部であるかどうかを確認する必要があり、その方法がわからないため、ブラインドを行うことはできません。

ヘルプ!ティア:)

4

1 に答える 1

1

yii フォーラムでこの素晴らしい提案を受け取りました。基本的に、子クラスで findByAttributes() をオーバーライドするだけで済みます:)

于 2012-07-05T19:45:56.167 に答える