2016-06-27 1 views
0

나는 2 개의 테이블 (사용자 및 기술)을 가지고 있으므로 두 번째 컨트롤러에서 별도로 두 번째 테이블에서 데이터를 검색해야합니다.여러 데이터 가져 오기 Cakephp 3

loadmodel과 find()를 사용하여 $ this-> set()을 통해 볼 데이터 세트를 만들 수 있지만 웹 사이트는 70 년대보다 느려지고 하나만 검색하면 검색 속도가 빨라집니다.

그래서 기본적으로 난 내 쿼리를 최적화 할 필요가 내 DB

여기 내 코드의 속도를.

$users = $this->loadModel('Users'); 


    $datas=$users->find('all')->select(['id','phone', 'first_name','last_name','birthday','email','website', 'address', 'resume', 'cv_url'])->where(['id' => 1])->bufferResults(false)->ToArray(); 


    $technologies = $this->loadModel('Technologies'); 
    $technologies=$technologies->find('all')->select(['id', 'name', 'slug', 'image', 'exp', 'exp_perc'])->bufferResults(false)->ToArray(); 

    $this->set(compact('datas','technologies')); 

일부 DebugKit 이미지 enter image description here enter image description here

당신은 내가 단지 2 개 쿼리를 가지고 있지만 디버그에 10 보여주고 TABLE_SCHEMA이 35322ms와 전화 2 시간 (35,322 * 2)

했다 볼 수

모든 제안을 환영합니다.

+1

귀하의 질문에 더 많은 정보를 추가 할 것을 제안합니다. 이는 재현 할 수없는 문제이므로 많은 도움을 얻지 못할 것입니다. 어떤 DBMS를 사용하고 있습니까? 결과 쿼리는 어떻게 생겼습니까? 얼마나 많은 레코드가 검색되고 있습니까? 시간은 정확히 어디에 쓰이는지 (프로파일 러를 사용하여 알아내는 것)? 등 ... – ndm

답변

0

모델을로드하고 선택 쿼리를 작성하는 대신 (쿼리 시간이 늘어남) TableRegistry을 사용해야합니다.

예를 들어, 대신 $users = $this->loadModel('Users');$usersTable = TableRegistry::get('Users');을 사용해야하고 그 후 당신은 foreach($query as $row)와 쿼리의 행을 $query = $usersTable->find('all')->.....하여 데이터를 조회하고 반복 할 수 있습니다.

전체 '사용자'모델을로드하지 않고 cakePHP 쿼리로 쉽게 작동 할 수있는 UsersTable 만 사용한다는 점을 고려하면 더 빠릅니다. http://book.cakephp.org/3.0/en/orm/table-objects.html#getting-instances-of-a-table-class

나는 그것이 도움이되기를 바랍니다 :

는 여기에 몇 가지 자세한 정보입니다! ;)

+0

나는 이미 그 문제를 직접 서버에서 일하고있다. 디버그 모드를 사용하면 쿼리를 실행하는 데 많은 시간이 걸립니다. 내가 localhost에서 그것을 시도하고 디버그 모드가 true로 설정된 경우에도 잘 작동합니다. –