CakePHP array () пуст, но, похоже, запрос получает правильные результаты - PullRequest
1 голос
/ 25 мая 2011

Я пытаюсь извлечь ТОЛЬКО PlanDetails, где PlanDetail.company_id = Company.id AND PlanDetail.id '=> $ id .. (вы можете увидеть условия в моем контроллере ниже) ..

Контроллер:

    function pd_list_by_company($id = null) {
    $this->recursive = 2; // I am going to use containable to trim this. 
    return $this->PlanDetail->find('all',
        array('conditions' => 
        array('AND' => 
        array('PlanDetail.company_id' => 'Company.id',
        array('PlanDetail.id' => $id)))));
    }

Тестовый просмотр:

$planDetailsByCompany = $this->requestAction('/planDetails/pd_list_by_company');

debug($planDetailsByCompany );

Вывод результата моей отладки ??

Array()

Если я уберу условия и просто найду все, я получу все PlanDetails, как и ожидалось, поэтому я знаю, что данные передаются ... Отладочный дамп SQL даже показывает запрос:

WHERE ((`PlanDetail`.`company_id` = 'Company.id') AND (`PlanDetail`.`id` IS NULL))

И да, я заметил, что $ id равен NULL, и я знаю, что значение должно быть там. Поэтому, возможно, мой вопрос заключается в том, почему значение $ id не передается контроллеру, даже если я вижу PlanDetail Значение .id для поиска ('all') без условий ??

Спасибо за любые советы.

Ответы [ 3 ]

1 голос
/ 25 мая 2011

Чтобы ответить на вопрос, почему $ id не передается, это потому, что вы его не передаете

Чтобы передать скажем $ id из 2, вам нужно сделать следующее в вашем запросе. Действие

$ this-> requestAction ( '/ planDetails / pd_list_by_company / 2');

1 голос
/ 25 мая 2011

Поскольку $id кажется нулевым, я предполагаю, что вы вызываете функцию без параметра.И вы не получите сообщение об ошибке, потому что для PHP параметр является необязательным.В этом случае это явно требуется, поэтому вы должны сделать его обязательным параметром в объявлении функции:

function pd_list_by_company($id) {

Также вы можете упростить оператор возврата, вам не нужно AND:

return $this->PlanDetail->find('all',
    array('conditions' => 
        array('PlanDetail.company_id' => 'Company.id','PlanDetail.id' => $id)
    )
);
0 голосов
/ 25 мая 2011

Мне кажется, что ваш код должен быть просто

return $this->PlanDetail->find('array('PlanDetail.id' => $id));

Если у вас установлен рекурсивный флаг $ this-> PlanDetail->, равный> 0, ваша Модель уже должна знать и возвращать связанные данныедля любой таблицы 'Company' .....

Я привык к старой (1.3) версии CakePHP, но функция find () довольно проста и предназначена для возврата только одной строки.

и да, вам определенно нужно вызвать функцию с идентификатором, добавленным к URL, например.

$planDetailsByCompany = $this->requestAction('/planDetails/pd_list_by_company/999');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...