2017-03-24 8 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는 바로 그것을 할 수있는 사실 알고 싶었다.


편집

상황.

Post 엔티티는 text 속성을가집니다. text은 원격 (심지어 HTML 코드로) 이미지를 포함 할 수 있습니다. 이제 어딘가에을 텍스트에 포함 된 첫 번째 이미지의 URL과 크기를 저장해야합니다. 그래서 나는 정규식을 사용하는 first_image 가상 필드를 만들었습니다. 문제는 이미지 크기와 관련이 있습니다. getimagesize() 기능을 실행할 때마다, 특히 이미지가 원격 인 경우 쉽게 실행할 수 있습니다. 이유는 쉽게 이해할 수 있기 때문입니다. 그렇게하는 방법?

답변

2

가상 필드를 캐시 할 수있는 방법이 있습니까?

번호

그리고 당신은 훨씬 이해가되지 않습니다 무엇. 캐싱은이 경우 아무 것도 얻지 못하는 것보다 더 많은 오버 헤드를 일으키는 것입니다.

대신 DB 레벨에서 concat()을 사용하여 이름을 연결하십시오.

또한 가상 속성을 캐시해야 할 필요가 있다면 아키텍처에 분명히 잘못된 점이 있다고 말할 수 있습니다.

+0

Ok @burzum. 'Post' 엔티티는'text' 속성을 가지고 있습니다. '텍스트'는 이미지를 포함 할 수 있습니다 (HTML 코드처럼), 심지어 원격. 이제는 "텍스트"와 그 크기에 포함 된 첫 번째 이미지의 URL *을 어딘가에 저장해야합니다. 그래서 나는 정규식을 사용하는'first_image' 가상 필드를 만들었습니다. 문제는 이미지 크기와 관련이 있습니다. 특히 이미지가 원격 인 경우 'getimagesize()'함수를 실행할 때마다이를 수행 할 수 없습니다. 이유는 쉽게 이해할 수 있기 때문입니다. 그렇게하는 방법? –

+0

코드의 변경된 컨텍스트 –

+0

beforeSave() 콜백에서 이러한 종류의 처리 만 수행하면됩니다. book.cakephp.org에서 사용 방법을 확인하십시오. 상점에 정보를 추출하십시오. 다음에 뭔가를 물어 보면 현명한 문제가 아닌 다른 문제가 생길 수도 있습니다. ;) – burzum