Прежде всего, вы не придерживаетесь правил именования CakePHP. (Проверьте их здесь ). Это поможет вам обнаружить небольшие ошибки, например, название вашей модели: Автомобили , когда оно должно быть Автомобиль . Я бы также переименовал вашу таблицу в car_categories
и, следовательно, все вхождения от Carcategory
до CarCategory
.
Модели / car.php
class Car extends AppModel {
var $name = 'Car';
var $belongsTo = array('CarCategory', 'User');
}
Модели / car_category.php
class CarCategory extends AppModel {
var $name = 'CarCategory';
var $hasMany = array(
'Car' => array(
'className' => 'Car',
'foreignKey' => 'car_category_id',
'order' => 'CarCategory.name ASC',
'dependent' => true
)
);
}
Контроллеры / cars_controller.php
function beforeFilter() {
$this->set('carCategories', $this->Car->CarCategory->find('list'));
}
Примечание: вам не нужно указывать порядок, потому что вы уже упомянули его в модели как порядок по умолчанию. Также обратите внимание на соглашения об именах для переменной представления. Это позволило бы нам сделать магию CakePHP и просто напечатать это в представлении:
вид
echo $form->input('car_category_id', array('class' => 'short'));
Опять же, не для того, чтобы быть педантичным, но метка должна быть Категория машины вместо Категории автомобилей , как у вас сейчас, так как Автомобиль может принадлежать только к одной категории ваша модель данных.
Если вам нужен разделитель ":" для всех ваших ярлыков, вы можете использовать CSS для их добавления. Проверьте здесь , чтобы узнать как. Вы также можете указать опцию between
для ввода формы.
Таблица
Переименуйте таблицу carcategories
в car_categories
Переименуйте столбец carcategory_id
в таблице автомобилей на car_category_id
Возвращаясь к вашей актуальной проблеме:
Undefined property: CarsController::$CarCategory
Это означает, что вы не можете получить доступ к модели CarCategory
из CarsController
. По умолчанию CarsController
будет управлять моделью Car
. Чтобы управлять моделью CarCategory, вы можете сделать это одним из многих способов:
- Использование ассоциаций:
$this->Car->CarCategory->find( ... )
- В вашем контроллере установите переменную $ used следующим образом:
var $uses = array('Car', 'Carcategory');
Вы также можете загружать модели «на лету» (используя loadModel
или ClassRegistry::init
, если вам это интересно), но, поскольку вы выбираете список категорий автомобилей в beforeFilter, вам следует придерживаться одного из них. из вышеуказанных методов (предпочтительно ассоциаций).
Надеюсь, это поможет. Не забудьте внимательно посмотреть на названия всех ваших моделей, контроллеров, файлов и таблиц.