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 属性が元の基準の一部であるかどうかを確認する必要があり、その方法がわからないため、ブラインドを行うことはできません。
ヘルプ!ティア:)