J'essaie de faire une list déroulante des users en utilisant la key étrangère [UserID]. Dans le controller, j'ai trouvé ("list"). Lorsque je débogue $this->Order->SalesAgent
dans le controller, il imprime l'object user. Cependant, dans la page d'affichage, lorsque je débogue le résultat de $this->Order->SalesAgent->find("list")
, affiche et tableau vide.
Heres le controller:
public function edit_sales_agent ($id=null) { debug($this->Order->SalesAgent); $this->set("users",$this->Order->SalesAgent->find("list")); debug($this->users); }
et voici la vue:
debug($users); echo $this->Form->create("Order"); echo $this->Form->input("UserID");
$users
est le résultat de find("list")
Quelqu'un pourrait m'aider? Merci!
Association:
class Order extends AppModel{ public $useTable = 'CustomerOrder'; public $primaryKey = 'OrderID'; **public $belongsTo = array( "SalesAgent"=>array( "className"=>"User", "foreignKey"=>"UserID"** ),
Modèle d'agent de vente:
<?php class User extends AppModel{ public $useTable = 'UserAccount'; public $primaryKey = 'UserID'; public $order = array( "User.LastName"=>"asc", "User.FirstName"=>"asc" ); public function __construct($id = false, $table = null, $ds = null) { parent::__construct($id, $table, $ds); $this->virtualFields['full_name'] = sprintf("(%s.FirstName+' '+%s.LastName)", $this->alias, $this->alias); } public function login($data){ return $this->find("first",array("conditions"=>$data['User'])); } }
D'accord, j'ai donc compris quel est le problème mais je ne sais pas comment le réparer. Lorsque je tape find (list), voici la requête qu'il exécute:
SELECT [SalesAgent]. [ID user] AS [SalesAgent__0], [SalesAgent]. [ID user] AS [SalesAgent__1] FROM [Compte user] AS [SalesAgent] WHERE 1 = 1 ORDER BY [user]. [LastName] asc, [user] . [Prénom] asc
C'est l'erreur qu'elle propose:
Erreur SQL: Le préfixe de colonne 'Utilisateur' ne correspond pas à un nom de table ou un nom d'alias utilisé dans la requête. [APP / Model / Datasource / Mssql.php, ligne 749]
SalesAgent utilise la class User, qui utilise la table UserAccount
Je l'ai compris.
Le problème était que la requête allait s'exécuter:
SELECT [SalesAgent]. [ID user] AS [SalesAgent__0], [SalesAgent]. [ID user] AS [SalesAgent__1] FROM [Compte user] AS [SalesAgent] WHERE 1 = 1 ORDER BY [user]. [LastName] asc, [user] . [Prénom] asc
où il serait commandé par [User] .LastName et [User]. [FirstName].
L'user ne correspond pas au nom de la table OU au nom de l'alias, donc j'ai dû spécifier l'ordre dans le gâteau.
array( "fields"=>array("SalesAgent.username"), ' "order"=>["SalesAgent.UserID ASC"] )
Essayez d'abord de configurer votre association de model.
Qu'est-ce qui appartient à quoi et en exécutant ce
public function edit_sales_agent ($id=null) { $users = $this->Order->SalesAgent->find("list"); $this->set("users",$users); }
voir essayer
echo $this->Form->input("user_id");
Vous devriez avoir la list des users.