2017-03-06 4 views
0

LIMITを考慮せずに、現在のクエリのデータベースで使用可能なレコードの数を欲しいです。制限なしcakePHP 3

私は、上記のクエリでは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は、方法など、あなたの質問に正確に答えを説明し、なぜそれが動作します:

は、単一のクエリオブジェクトを使用してレコード

の総数を返す、それがPOSSです

:カウント()メソッドは、以下が同じ結果を返す、したがって、制限を無視オフセットとページ句、 う

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

:条件のセットのために見つかった行の総数 を得ることがible

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

これは、 の合計結果セットサイズを事前に知る必要がある場合に便利です。別のQueryオブジェクトを構築する必要はありません。同様に、 count()メソッドを使用すると、すべての結果の書式設定とmap-reduceルーチンは無視されます。

お知らせ

だから、このような何かしてみてください「...制限、オフセットを無視し、ページ句う」について少し:私はあなたが実際に試したことがないことを前提としてい

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

同じ結果を得るために、$ totalのcount()を呼び出すこともできます。実際には、現在のクエリでレコードの数を使用できないようにします。現在のクエリでは50件の結果があり、各ページに5つのレコードを表示したいとします。「これは合計50件です」というユーザーを表示します。あなたは私のポイントを得ることを願っています。 @ 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 –

関連する問題