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

Author: Anthony, 2015-07-30

2 answers

Я понял это.

Проблема заключалась в том, что запрос будет выполняться:

ВЫБЕРИТЕ [Агент по продажам].[Идентификатор пользователя] КАК [Агент по продажам __0], [Агент по продажам].[Идентификатор пользователя] КАК [Агент ПО продажам __1] ИЗ [Учетной записи пользователя] КАК [Агент по продажам], ГДЕ 1 = 1 ЗАКАЗ [Пользователем].[Фамилия] asc, [Пользователь].[Имя пользователя] asc

Где он будет заказываться [Пользователем].Фамилия и [Пользователь].[Имя].

Пользователь не совпадает с именем таблицы ИЛИ псевдонимом, поэтому мне пришлось указать порядок в cake.

array(
   "fields"=>array("SalesAgent.username"), 
'   "order"=>["SalesAgent.UserID ASC"] 
)
 1
Author: Anthony, 2015-08-04 15:01:00

Сначала попробуйте настроить ассоциацию вашей модели.

Что принадлежит чему и чему, запустив это

public function edit_sales_agent ($id=null) {
    $users = $this->Order->SalesAgent->find("list");
    $this->set("users",$users);
}

Просмотр попробуйте это

echo $this->Form->input("user_id");

У вас должен быть список пользователей.

 0
Author: Fury, 2015-08-03 10:12:41