CakePHP find ("список") возвращает пустой массив
Я пытаюсь составить выпадающий список пользователей, используя внешний ключ [Идентификатор пользователя].
В контроллере у меня есть find ("список"). Когда я отлаживаю $this->Order->SalesAgent
в контроллере, он печатает объект пользователя. Однако на странице просмотра, когда я отлаживаю
результат $this->Order->SalesAgent->find("list")
, отображается и пустой массив.
Вот контроллер:
public function edit_sales_agent ($id=null) {
debug($this->Order->SalesAgent);
$this->set("users",$this->Order->SalesAgent->find("list"));
debug($this->users);
}
И вот мнение:
debug($users);
echo $this->Form->create("Order");
echo $this->Form->input("UserID");
$users
является результатом find("list")
Может ли кто-нибудь мне помочь выйти? Спасибо!
Ассоциация:
class Order extends AppModel{
public $useTable = 'CustomerOrder';
public $primaryKey = 'OrderID';
**public $belongsTo = array(
"SalesAgent"=>array(
"className"=>"User",
"foreignKey"=>"UserID"**
),
Модель агента по продажам:
<?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']));
}
}
ОБНОВЛЕНИЕ:
Хорошо, итак, я понял, в чем проблема, но я не знаю, как это исправить. Когда я набираю найти(список), он выполняет следующий запрос:
ВЫБЕРИТЕ [Агент по продажам].[Идентификатор пользователя] КАК [Агент по продажам __0], [Торговый агент].[Идентификатор пользователя] КАК [Агент ПО продажам __1] ИЗ [Учетной записи пользователя] КАК [Торговый агент] ГДЕ 1 = 1 ЗАКАЗ [Пользователем].[Фамилия] asc, [Пользователь].[Имя] asc
Это ошибка, которую он предлагает:
Ошибка SQL: префикс столбца "Пользователь" не совпадает с именем таблицы или псевдоним, используемый в запросе. [APP/Model/Datasource/Mssql.php, линия 749]
Агент по продажам использует класс User, который использует таблицу UserAccount
2 answers
Я понял это.
Проблема заключалась в том, что запрос будет выполняться:
ВЫБЕРИТЕ [Агент по продажам].[Идентификатор пользователя] КАК [Агент по продажам __0], [Агент по продажам].[Идентификатор пользователя] КАК [Агент ПО продажам __1] ИЗ [Учетной записи пользователя] КАК [Агент по продажам], ГДЕ 1 = 1 ЗАКАЗ [Пользователем].[Фамилия] asc, [Пользователь].[Имя пользователя] asc
Где он будет заказываться [Пользователем].Фамилия и [Пользователь].[Имя].
Пользователь не совпадает с именем таблицы ИЛИ псевдонимом, поэтому мне пришлось указать порядок в cake.
array(
"fields"=>array("SalesAgent.username"),
' "order"=>["SalesAgent.UserID ASC"]
)
Сначала попробуйте настроить ассоциацию вашей модели.
Что принадлежит чему и чему, запустив это
public function edit_sales_agent ($id=null) {
$users = $this->Order->SalesAgent->find("list");
$this->set("users",$users);
}
Просмотр попробуйте это
echo $this->Form->input("user_id");
У вас должен быть список пользователей.