Snippets

Sergio de EOM Ejemplo de como crear un join en pagination, agregarle el tipo de columna, agregada por alias en el fields, Users__total_of_licenses, etc.. en CakePHP 3

Created by Sergio N. last modified
<?php

namespace App\Controller;

use App\Controller\AppController;
use Cake\Core\Configure;
use Cake\Datasource\Exception\MissingModelException;
use Cake\Datasource\Exception\RecordNotFoundException;
use Cake\I18n\Time;
use Cake\Network\Exception\NotFoundException;
use Cake\Event\Event;
use Cake\Utility\Hash;
use ReCaptcha\ReCaptcha;
use RuntimeException;


/**
 * Users Controller
 * @property \App\Model\Table\UsersTable $Users
 * @property \App\Model\Table\TimezonesTable $Timezones
 * @property \App\Model\Table\UserRolesTable $UserRoles
 * @property \App\Model\Table\CountriesTable $Countries
 * @property \App\Model\Table\LanguagesTable $Languages
 * @property \App\Model\Table\LanguagesAppTable $LanguagesApp
 * @property \App\Model\Table\LicenseesTable $Licensees
 * @property \App\Model\Table\SocialProfilesTable $SocialProfiles
 */

class UsersController extends AppController
{
    ......
    ......
    
    /**
     * Index method
     * @return \Cake\Network\Response|null
     */
    public function index()
    {

       # Hi my alternative example full, user scheman() in controller Users add type column aliasFiels by join data:
       # Ejemplo de como crear un join en pagination, agregarle el tipo de columna, agregada por alias en el fields, Users__total_of_licenses, etc..
       
            $this->Users->schema()
                ->addColumn('is_licensed', [
                    'type' => 'boolean',
                ])
                ->addColumn('total_of_licenses', [
                    'type' => 'integer',
                ]);
    
            $fields = [
                'Users.id',
                'Users.username',
                'Users.first_name',
                'Users.last_name',
                'Users.active',
                'Users__is_licensed' => 'if(count(LicenseesUsers.id)>=1,true,false)',
                'Users__total_of_licenses' => 'count(LicenseesUsers.id)',
                'Users.created',
                'Users.modified',
                'Languages.id',
                'Languages.name',
                'Countries.id',
                'Countries.name',
                'UserRoles.id',
                'UserRoles.name',
            ];

         $where = [
            'contain' => ['UserRoles', 'Countries', 'Languages'],
            'fields' => $fields,
            'join' => [
                'LicenseesUsers' => [
                    'table' => 'licensees_users',
                    'type' => 'LEFT',
                    'conditions' => [
                        'Users.id = LicenseesUsers.users_id'
                    ],
                ],
            ],
            'group' => 'Users.id'
        ];

        // Set pagination
        $this->paginate = $where;

       // Get data in array
       $users = $this->paginate($this->Users)->toArray();
    }
    
    ......
    ......
    
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.