knppaginatorでページ付けをしようとしています。
私は同じウェブサイトの他の場所でそれを使用しています、そして彼はうまく働きます。
しかし、今は他のクエリで使用しようとしていますが、問題があります。
$query = $src->getQuery();
//die(print_r($query->getDQL()));
//die(print_r($query->getParameters()));
$paginator = $this->get('knp_paginator');
$paginator = $paginator->paginate(
$query,
$this->get('request')->query->get('page', 1),
15
);
$ srcは、クエリを作成するためのカスタムサービスです。ダイライン「getDQL」はこのDQLを返します:
SELECT p FROM YOUProductBundle:Product p INNER JOIN p.boutique b INNER JOIN p.material m INNER JOIN p.cat1 cat WHERE p.stock > 0 AND p.type = :type AND cat.id = :cat AND b.latitude >= :latN AND b.latitude <= :latP AND b.longitude >= :lonN AND b.longitude <= :lonP AND distance(b.latitude,b.longitude,48.583148,7.747882000000004) <= :rayon ORDER BY m.prix ASC
ダイライン「getParameters」はこのデータを返します:
Doctrine\Common\Collections\ArrayCollection Object
(
[_elements:Doctrine\Common\Collections\ArrayCollection:private] => Array
(
[0] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => type
[value:Doctrine\ORM\Query\Parameter:private] => material
[type:Doctrine\ORM\Query\Parameter:private] => 2
)
[1] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => cat
[value:Doctrine\ORM\Query\Parameter:private] => 21
[type:Doctrine\ORM\Query\Parameter:private] => integer
)
[2] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => latP
[value:Doctrine\ORM\Query\Parameter:private] => 49.257639204439
[type:Doctrine\ORM\Query\Parameter:private] => 2
)
[3] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => latN
[value:Doctrine\ORM\Query\Parameter:private] => 47.908656795561
[type:Doctrine\ORM\Query\Parameter:private] => 2
)
[4] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => lonP
[value:Doctrine\ORM\Query\Parameter:private] => 8.7674709750602
[type:Doctrine\ORM\Query\Parameter:private] => 2
)
[5] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => lonN
[value:Doctrine\ORM\Query\Parameter:private] => 6.7282930249398
[type:Doctrine\ORM\Query\Parameter:private] => 2
)
[6] => Doctrine\ORM\Query\Parameter Object
(
[name:Doctrine\ORM\Query\Parameter:private] => rayon
[value:Doctrine\ORM\Query\Parameter:private] => 75
[type:Doctrine\ORM\Query\Parameter:private] => 2
)
)
)
エラーはありませんが、このクエリの結果は0です。ここで、「$ query-> getArrayResult()」を実行しようとすると、5つの結果が得られます。
なぜページネーターは5つの通常の結果を得られないのですか?
パラメータの順序が良くありません...パラメータを設定するとき、順序が正しくありません。以下を参照してください。
->andWhere('b.latitude >= :latN')
->andWhere('b.latitude <= :latP')
->andWhere('b.longitude >= :lonN')
->andWhere('b.longitude <= :lonP')
->andWhere('distance(b.latitude,b.longitude,'.$datas['lat'].','.$datas['lon'].') <= :rayon')
->setParameter('latP',$latP)
->setParameter('latN',$latN)
->setParameter('lonP',$lonP)
->setParameter('lonN',$lonN)
->setParameter('rayon',$datas['search']);
「latP」を「latN」と逆にし、「lonP」を「lonN」と逆にします。
クエリビルダーを使用する場合は問題ありません...しかし、Paginatorのクエリをエクスポートすると、最終的なクエリとパラメーター配列の順序が正しくなく、正しいクエリを実行できません...。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加