извлечение части данных модели «принадлежит» в cakephp

Может быть, это потому, что я смертельно устал, но я совершенно что-то здесь упускаю. Я унаследовал приложение Cake 1.3 от друга, который правильно настроил свои таблицы, но мне не хватает некоторых данных. Когда я печатаю массив данных, я ожидаю, что это:

 Array
(
[Listing] => Array
    (
        [id] => 74
        [listing_name] => El Toro
        [category_id] => 3
        [location_id] => 2
        [long_desc] => 
    ),

[Category] => Array
    (
        [id] => 3
        [category_name] => Restaurant

    ),
)

(Список принадлежит категории). Функция контроллера определяется следующим образом:

function view_detail(){

    $this->set('um','true');
    $l=$this->Listing->find('first', array('conditions'=>array('id'=>$this->params['cid'])));
    $this->set('lst', $l);


}

Вместо этого я получаю это:

 Array
(
[Listing] => Array
    (
        [id] => 74
        [listing_name] => El Toro
        [category_id] => 3
        [location_id] => 2
        [long_desc] => 
    )
)

Просматривая таблицы базы данных, которые он настроил, все соглашения торта были соблюдены: у списков есть category_id, а у категорий — listing_id. Я полагаю, что некоторое время назад мне сказали, что если у вас есть простые модели/ассоциации для печенья, вам даже не нужно настраивать страницы моделей, поскольку торт автоматически узнает ассоциации. Но я все равно это сделал, и это не имело никакого значения. Я пытался установить рекурсивность до 2, и это не имело никакого значения. Ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо, даже я не очень хорошо разбираюсь в cakephp. Кстати, я хочу указать название категории (ресторан) в списке.

ОБНОВЛЕНИЕ

Вот мои 2 модели:

class Category extends AppModel{

var $hasMany = array( 'Listing' );

}


class Listing extends AppModel{
var $name='Listing';
var $belongsTo = array( 'Location'=>array('foreignKey'=>'location_id'),   'Category'=>array('foreignKey'=>'category_id') );

}

person huzzah    schedule 23.09.2012    source источник
comment
category.listing_id неправильный/ненужный. Вы уверены, что у вас есть public $belongsTo = array('Category'); в модели Listing и public $hasMany = array('Listing'); в модели Category?   -  person tigrang    schedule 23.09.2012
comment
category.listing_id случайно попал в список, когда я вводил эти массивы (на самом деле не в таблице базы данных, извините!). И модель листинга, и модель категории имеют правильный синтаксис с appendTo и hasMany. Это торт 1.3, поэтому я использую только var $hasMany и т. д., а не общедоступный $hasMany.   -  person huzzah    schedule 23.09.2012
comment
Каков результат debug(get_class($this->Listing))? Это модель приложения или листинг? Рекурсивный должен работать, но попытка Контейнерного поведения не повредит.   -  person tigrang    schedule 23.09.2012
comment
Ну, это ваша проблема. Какое имя файла, путь (относительно каталога вашего приложения) и имя класса для вашей модели листинга   -  person tigrang    schedule 23.09.2012
comment
Это /app/models/Listing.php, и у меня не было имени класса, объявленного ни в Listing.php, ни в Category.php.   -  person huzzah    schedule 23.09.2012
comment
давайте продолжим это обсуждение в чате   -  person tigrang    schedule 23.09.2012


Ответы (1)


В 1.x файлы модели должны быть в нижнем регистре и с подчеркиванием, поэтому app/model/listing.php. Когда ваш класс модели отображается как AppModel, это означает, что торт не находит ваш класс модели и не создает общий класс на основе AppModel.

person tigrang    schedule 23.09.2012
comment
Это было оно. Я использовал соглашения об именах для Cake 2.x. - person huzzah; 23.09.2012