2017-02-06 14 views
2

Условия проблемыпоколения CakePHP кода не работает для таблицы без первичного ключа [Новичок]

У меня есть простой проект CakePHP, который работает отлично. И я хочу добавить еще две страницы, которые отображают данные из следующих таблиц:

Первая таблица содержит первичный ключ first

Вторая таблица содержит внешний ключ

last

Для того, чтобы создайте эти 2 страницы, которые я использую для генерации кода: ./cake bake all table_name

Задача

Когда я запускаю эту команду для первой таблицы, она работает нормально, но когда я запускаю скрипт для второй таблицы, он не генерирует просмотров (я имею в виду файлы * .ctp). Ошибка заключается в следующем:

Error: Cannot generate views for models with no primary key

Я попытался создать index.ctp внутри Src/шаблон/second_table/index.ctp, но CakePHP возвращает эту ошибку:

Unable to locate an object compatible with paginate

Как исправить это? Могу ли я создавать виды вручную?

+0

Не испекивает ли вам подсказки о связях с таблицами? Кроме того, соглашение будет, если ваша первая таблица называется 'names', а вторая -' details', внешний ключ будет содержать имя 'name_id'. Затем он должен работать автоматически. – AbraCadaver

+0

Я изменил имя столбца во второй таблице, как вы сказали, но ошибка такая же, она не указывает на какие-либо отношения между таблицами: Ошибка: невозможно создать представления для моделей без первичного ключа – egorik

+0

Вы следовали правилам? http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions – AbraCadaver

ответ

1

Я думаю, что вы все еще возникают проблемы с созданием таблицы correctly.And выглядит как ваш второй таблицы не имеют первичный ключ:

Просто следовать конвенции CakePHP следующим образом:

имена таблиц

create table names (
    id int not null auto_increment primary key, 
    first_name varchar(255), 
    last_name varchar(255) 
) 

детали таблица:

create table details (
    id int not null auto_increment primary key, 
    name_id int, 
    email varchar(255), 
    address varchar(255) 
) 

Теперь перейдите в ваш путь к директории проекта и внутри бункера (E: \ XAMPP \ HTDOCS \ блогов \ Bin> для меня):

1.cake bake all names 
2.cake bake all details 

Полностью следовать (cakephp conventions), который будет делать вещи проще ,

+0

Да, вы правы, проблема заключалась в соглашениях. Я сделал все, как вы сказали, и все работает нормально. Спасибо огромное! Но мне нужно прояснить еще одну вещь: когда таблица с внешним ключом содержит несколько слов (например, detail_info), как я могу получить доступ к этой странице? Если я пытаюсь использовать url как localhost/cakephp/detailsinfo, он возвращает ** Невозможно найти объект, совместимый с paginate ** – egorik

+0

Добро пожаловать! Если вы извлекаете данные разбивки на страницы, вам нужно предоставить страницу в url..like localhost/cakephp/detailsinfo/1. Если вы посмотрите на некоторые функции, такие как вид (который сделан из выпечки торта), вы можете понять это достаточно хорошо. –