2017-03-24 10 views
0

仮想フィールドをキャッシュする方法はありますか?エンティティがキャッシュから取得されても、必要に応じていつでも仮想フィールドが生成されることを理解しているので、自動的に、そのエンティティが属するエンティティを意味します。CakePHP 3.4:仮想フィールドをキャッシュする方法

protected function _getFullName() 
{ 
    $fullName = Cache::read('full_name_for_' . $this->_properties['id'], 'users'); 

    if (empty($fullName)) { 
     $fullName = $this->_properties['first_name'] . ' ' . $this->_properties['last_name']; 

     Cache::write('full_name_for_' . $this->_properties['id'], $fullName, 'users'); 
    } 

    return $fullName; 
} 

しかし、私は、実際にCakePHPは直接それを行うことができるかどうかを知りたいと思った:

もちろん、私は私が、個人的にそれを(例)世話をすることができます知っています。


EDIT

コンテキスト。

Postエンティティには、textプロパティがあります。 textには、画像を含むことができます(HTMLコードとして)。今度は、のどこかにを保存して、テキストに含まれる最初のイメージのURLとそのサイズを保存する必要があります。だから、first_imageバーチャルフィールドを作成しました。これは正規表現を使用します。問題は画像のサイズにあります。特に画像が遠隔の場合は、getimagesize()の機能が実行されるたびに実行できません。なぜなら、わかりやすい理由があります。だからどうする?

答えて

2

バーチャルフィールドをキャッシュする方法はありますか?

そして、あなたは、あまり意味がありません何をすべきか。キャッシングは、この場合は何かを得るよりもオーバーヘッドが多く発生します。

DBレベルでconcat()を使用して、代わりに名前を連結します。

また、仮想プロパティをキャッシュする必要が本当にある場合は、アーキテクチャに明らかに間違ったものがあると言います。

+0

Ok @ burzum。 'Post'エンティティは' text'プロパティを持っています。 'text'には画像を含むことができます(htmlコードとして)。今度は、 'text'に含まれる最初の画像のURLとそのサイズを*どこかに保存しなければなりません。だから、正規表現を使った 'first_image'仮想フィールドを作成しました。問題は画像のサイズにあります。特に、画像が遠隔の場合は、簡単に理解できる理由で、 'getimagesize()'関数が実行されるたびに実行できません。だからどうする? –

+0

コードのコンテキストを変更しました –

+0

beforeSave()コールバックでこの種の処理を行うだけです。 book.cakephp.orgでその使い方を確認してください。そこに情報を抽出してください。次に何かを尋ねると、何かの代わりに実際の問題を思い付くことは賢明かもしれません。 ;) – burzum

関連する問題