2017-03-06 2 views
0

현재 쿼리에서는 데이터베이스에서 사용할 수있는 레코드가 없지만 LIMIT는 고려하지 않습니다.레코드 수를 계산하지 않고 카운트를 제한하지 않았습니다. cakePHP 3

$this->Orders->find('all') 
      ->where(['order_quantity']=>5) 
      ->LIMIT(5); 

이 위의 쿼리에는 50 개의 레코드가 없습니다. 이제는 현재 쿼리에 사용할 수있는 레코드가 없습니다. 나는 count()를 사용할 수 없다. 왜냐하면 항상 사용할 수있는 레코드의 합계가 5보다 작거나 같기 때문이다. cakePHP에는 해결책이 있는가?

+0

을 그것? [** 카운팅 **] (https://book.cakephp.org/3.0/en/orm/query-builder.html#returning-the- total-count-of-records)는 한도, 오프셋 등을 무시하고 내부적으로는 쿼리 복사본을 사용하기 때문에 쿼리 개체를 사용할 수 있습니다. – ndm

답변

2

This page in the CakePHP 3 book이 포함 귀하의 질문에 정확히 답을 설명하는 방법과 그것이 작동하는 이유 :

는 단일 쿼리 객체를 사용하여 기록

의 총 개수를 반환, 그것은 포스입니다 ible 조건 세트에 대해 발견 된 행들의 총 수 을 구하는

$total = $articles->find()->where(['is_active' => true])->count(); 

오프셋 페이지 절은 따라서 다음과 같은 결과 반환 한계를 무시 카운트() 메소드

$total = $articles->find()->where(['is_active' => true])->limit(10)->count(); 

다른 쿼리 개체를 구성 할 필요없이 전체 결과 집합 크기를 으로 미리 알아야 할 때 유용합니다. 마찬가지로 count() 메소드를 사용하면 모든 결과 서식 지정 및 map-reduce 루틴이 무시됩니다.

공지 사항

그래서이 같은 시도 "... 한계, 오프셋을 무시하고 페이지 조항 것"에 대한 비트 : 나는 당신이 실제로 시도하지 않은 가정

$data = $articles->find()->where(['is_active' => true])->limit(10); 
$count = $data->count(); 
+0

동일한 결과를 얻으려면 $ total에 count()를 호출 할 수도 있습니다. 사실, 현재 레코드에 레코드의 수를 사용 가능하게하고 싶습니다. 현재 쿼리에 대해 50 개의 결과가 있고 각 페이지에 5 개의 레코드를 표시하고 "총 50 개 중 5 개입니다."라는 사용자를 표시하려고합니다. 당신이 내 요점을 얻을 수 있기를 바랍니다. @ Rik.esh –

+0

나는 (책에서) 내가 제공 한 것이 정확히 무엇을 요청했는지, 그리고 지금 다시 설명하고 있다고 생각한다. – Dave

+0

고마워요, 데이브. 그냥 카운트를 반환하지만, 나는 count 및 result_rows를 원한다. 그래서 이것이 가능한가? –

0

find에서 한계 사용에 익숙하지 않다고 생각합니다. 그래서 docs을 공부하는 것이 좋습니다.

쿼리의 제한은 실제로 쿼리에 50 개의 데이터가있는 경우에도 처음 5 개의 데이터 만 표시한다는 것을 의미합니다.

다음과 같이

그래서, 실제 데이터를 얻기 위해, 당신은 단지 한계를 제거하고 코드에 약간의 변경이 필요 :

$this->Orders->find('count')->where(['order_quantity' => 5]); 
+0

50에서 5 레코드 만 원하지만 "50 레코드가 일치, 표시 만 5"라는 사용자를 표시하고 싶습니다. @Dave –

관련 문제