2013-01-31 9 views
6

Ho letto la documentazione e ho faticato a capire cosa fare. Inoltre, ho letto le domande qui su StackOverflow e nulla di ciò che ho provato ha aiutato.Utilizzo di campi virtuali in cakePHP 2.x

Ho un elenco a discesa che desidero elencare tutti i dipendenti dell'azienda. L'elenco deve essere visualizzato in questo modo:

Name Surname (Job Title) 

Nel mio modello, ho questo pezzo di codice:

public $virtualFields = array(
    'fullname' => 'CONCAT(HrEmployee.name, " ", HrEmployee.surname, " (", HrEmployee.jobTitle, ")")' 
); 

E nel mio controller, ho questo:

$hrEmployees = $this->User->HrEmployee->find('fullname', 
    array(
     'fields' => array('HrEmployee.name','HrEmployee.surname','HrEmployee.jobTitle'), 
     'order' => array('HrEmployee.name'=>'ASC','HrEmployee.surname'=>'ASC') 
)); 

Ma Ho ricevuto questo errore:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `User__fullname` FROM `intraweb_db`.`users` AS `User` WHERE `User`.`hr_emp' at line 1 

Cosa devo cambiare? Vedo che sta costruendo la query, ma sta cambiando è terribilmente male ...

Chiunque può aiutare?

risposta

3

fredda così ho riparato. In parte grazie a Brandon per avermi indicato nella giusta direzione.

A causa della limitazione dei campi virtuali, ho dovuto risolvere il problema.

Così, nel mio modello HrEmployee ho fatto questo:

public $virtualFields = array(
    'fullname' => 'CONCAT(HrEmployee.name, " ", HrEmployee.surname, " (", HrEmployee.jobTitle, ")")' 
); 

E nel mio modello User, ho cambiato in questo:

class User extends AppModel { 
public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    $this->virtualFields['fullname'] = $this->HrEmployee->virtualFields['fullname']; 
} 

E, infine, nel mio UsersController, ho appena cambiato un po ':

$hrEmployees = $this->User->HrEmployee->find('list', 
    array(
     'fields' => array("id","fullname"), 
     'order' => array('HrEmployee.name ASC','HrEmployee.surname ASC') 
)); 
3

La parte inferiore del documento torta specifica alcuni limiti di campi virtuali ..

L'attuazione di virtualFields ha alcune limitazioni. Innanzitutto non è possibile utilizzare i campi virtuali sui modelli associati per le condizioni, gli ordini o gli array di campi. In questo modo si genera generalmente un errore SQL poiché i campi non vengono sostituiti dall'ORM. Questo perché è difficile stimare la profondità alla quale un modello associato potrebbe essere trovato.

http://book.cakephp.org/2.0/en/models/virtual-fields.html#limitations-of-virtualfields

+2

Grazie. Questa risposta mi ha indirizzato nella giusta direzione. Vedi la mia risposta. – Albert

+0

Contento di aver parzialmente aiutato, e grazie per aver postato la tua soluzione! –

Problemi correlati