Comme je peux dans cakephp 3.x je peux trier les résultats par une ligne qui a un nombre, parce que je ne vois pas la forme, quelque chose de très similaire dans CakePHP 2.x fonctionne sans problème. Que manque-t-il pour pouvoir faire de même dans CakePHP 3.x ..? Mon test est en CakePHP v3.3.10 en PHP 7.1 WAMPTri de la pagination par, ligne Alias Compte par exemple dans CakePHP 3.x, données en liant une table de jointure
Tout le genre de travaux correctement, sauf pagination des finales count_users, quand je clique ne donne pas une erreur, il suffit de ne pas trier les données.
HTML ctp
<?= $this->Paginator->sort('count_users',_('N° Users')); ?>
contrôleur
$this->Licensees->schema()
->addColumn('count_users', [
'type' => 'integer',
]);
$this->Licensees->aliasField('count_users');
$where = [
'recursive'=>-1,
'fields' => [
'Licensees.id',
'Licensees.name',
'Licensees.created',
'Licensees.modified',
'Licensees__count_users' => 'count(LicenseesUsers.licensees_id)',
// 'count_users' => 'count(LicenseesUsers.licensees_id)',
// 'Licensees.count_users' => 'count(LicenseesUsers.licensees_id)',
],
'sortWhitelist' => ['name','count_users','created','modified'],
'join' => [
'LicenseesUsers' => [
'table' => 'licensees_users',
'type' => 'LEFT',
'conditions' => [
'LicenseesUsers.licensees_id = Licensees.id'
],
],
],
'group' => 'Licensees.id'
];
// Set pagination
$this->paginate = $where;
// Get data
$licensees = $this->paginate($this->Licensees);
Afficher erreur champ Trier paginations count_users
object(Cake\ORM\Query) {
'(help)' => 'This is a Query object, to get the results execute or iterate it.',
'sql' => 'SELECT Licensees.id AS `Licensees__id`, Licensees.name AS `Licensees__name`, Licensees.created AS `Licensees__created`, Licensees.modified AS `Licensees__modified`, count(LicenseesUsers.licensees_id) AS `Licensees__count_users`, count(LicenseesUsers.licensees_id) AS `count_users` FROM licensees Licensees LEFT JOIN licensees_users LicenseesUsers ON LicenseesUsers.licensees_id = Licensees.id LEFT JOIN users Users ON Users.id = LicenseesUsers.users_id GROUP BY Licensees.id ORDER BY Licensees.count_users asc LIMIT 50 OFFSET 0',
'params' => [],
'defaultTypes' => [
'Licensees__id' => 'uuid',
'Licensees.id' => 'uuid',
'id' => 'uuid',
'Licensees__name' => 'string',
'Licensees.name' => 'string',
'name' => 'string',
'Licensees__active' => 'boolean',
'Licensees.active' => 'boolean',
'active' => 'boolean',
'Licensees__deleted_at' => 'datetime',
'Licensees.deleted_at' => 'datetime',
'deleted_at' => 'datetime',
'Licensees__created' => 'datetime',
'Licensees.created' => 'datetime',
'created' => 'datetime',
'Licensees__modified' => 'datetime',
'Licensees.modified' => 'datetime',
'modified' => 'datetime',
'Licensees__count_users' => 'integer',
'Licensees.count_users' => 'integer',
'count_users' => 'integer'
],
'decorators' => (int) 0,
'executed' => false,
'hydrate' => true,
'buffered' => true,
'formatters' => (int) 0,
'mapReducers' => (int) 0,
'contain' => [],
'matching' => [],
'extraOptions' => [
'recursive' => (int) -1,
'scope' => null,
'sortWhitelist' => [
(int) 0 => 'name',
(int) 1 => 'count_users',
(int) 2 => 'created',
(int) 3 => 'modified'
],
'whitelist' => [
(int) 0 => 'limit',
(int) 1 => 'sort',
(int) 2 => 'page',
(int) 3 => 'direction'
]
],
'repository' => object(App\Model\Table\LicenseesTable) {
'registryAlias' => 'Licensees',
'table' => 'licensees',
'alias' => 'Licensees',
'entityClass' => 'App\Model\Entity\Licensee',
'associations' => [
[maximum depth reached]
],
'behaviors' => [
[maximum depth reached]
],
'defaultConnection' => 'default',
'connectionName' => 'default'
}
}
Je pense que vous avez juste à utiliser '' count_users' au lieu de Licensees__count_users', de cette façon: ' 'count_users' => 'count (LicenseesUsers.licensees_id)'' – arilia
Salut Arilia, ce n'est pas valide de cette façon, j'ai déjà essayé tout le chemin qu'ils sont commentés et ne commande pas par cette colonne. Je l'ajoute également en tant que virtualProperties dans l'identité, mais cela ne fonctionne pas non plus. Je ne sais pas quoi faire d'autre. Et il doit être en mesure de ** SORT ** par ** count_users ** – Sergio
Il est valide, mais vous avez fait une erreur supplémentaire, et vous devriez recevoir une erreur, que vous devriez toujours mentionner (et poster y compris la stracktrace correspondante et votre version exacte de CakePHP!), car cela aide grandement à résoudre les problèmes! – ndm