Каковы зарезервированные имена таблиц базы данных в CakePHP?

Я планировал свою базу данных, и, поскольку CakePHP не назвал свои классы собственными префиксами, существует множество классов, которые могут конфликтовать с классами моделей, созданными в соответствии с соглашениями об именах.

Итак, мой вопрос состоит из трех частей:

  1. Есть ли список зарезервированных имен таблиц базы данных или простой способ проверить, есть ли это? Было бы больно, если бы я спланировал базу данных со 100 таблицами и заметил бы, что некоторые таблицы и их соединения должны быть переименованы ...

  2. Есть ли простой способ обойти это без нарушения магии CakePHP? Это рекомендуется? Будет ли лучше всего называть таблицы другим способом, добавляя собственный префикс my_ или аналогичный в начале имени таблицы?

  3. Будут ли в CakePHP версии 2 пространства имен или что-то подобное, что позволит использовать все виды имен таблиц?


person Pehmolelu    schedule 11.06.2011    source источник


Ответы (3)


  1. Нет, нет. Cake не важно, как вы назовете свои столы, пока вы придерживаетесь соглашений об именовании Cake. Он генерирует схемы, которые он использует для методов магической модели, при первой загрузке модели / моделей контроллером; вам не нужно пошевелить пальцем. См. http://book.cakephp.org/view/903/Model-and-Database-Conventions

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

  3. Эта функция уже доступна в версии 1.3 - назовите свои таблицы как угодно (при условии, что это слова во множественном числе).

- Вам, вероятно, будет полезно ознакомиться с приложениями для выпечки в консоли, чтобы вы могли ознакомиться с тем, что Cake хочет видеть и как он работает на разных макетах стола.


Редактировать после уточнения:

Все ваши модели, контроллеры и каталоги представлений имеют общее имя, например:

 // in /app/models/rate.php
class Rate extends AppModel {

     var $name = 'Rate';


// in /app/controllers/rates_controller.php -- note the underscore
class RatesController extends AppController {

    // controllers are capitalized + plural
    var $name = 'Rates';

// в /app/views/rates/*.ctp - волшебный autoRender Cake ожидает найти файл представления с // тем же именем, что и действие, которое его рендерит - представление для Rates :: index () - index.ctp

Все ваши модели расширяют класс Cake AppModel (который расширяет класс Cake Model), префикса не требуется. Все контроллеры будут расширять класс Cake AppController - имя класса имеет суффикс Controller, а имя файла - суффикс _Controller.

Вы получите доступ к AppModel и AppController в / app, и они существуют специально для любых пользовательских методов / свойств всего приложения, которые у вас могут быть. Поскольку все ваши модели / контроллеры расширяют их, наследование автоматически распределяет любые свойства / методы, которые вы в них помещаете - например, Auth. ^ _ ^

Но вы все равно можете назвать таблицу «Модели», «Контроллеры», «Представления» или что-то еще, я думаю. Свойство $ name является псевдонимом; вы можете создать несколько экземпляров одной и той же таблицы в одной модели, присвоив ей другое имя. Вы можете создавать модели без таблиц, и вы можете переключаться между несколькими таблицами - или базами данных, или серверами - в одной модели. Вы также можете создавать для своих моделей объекты данных, не относящиеся к типу базы данных (например, плоские XML-файлы). Классы / методы с динамическими именами ($$ Model :: save () и т. Д.) В любом случае работают под капотом. Я делал что-то подобное в итерациях ради ОСУШЕНИЯ моего приложения, и у меня не было проблем. (Хотя я лично сомневаюсь, что создание локальной модели под названием Model стоило бы усилий, которые вы вложили в эксперимент ...)

И в этой заметке API Cake объясняет все свои классы, их методы и т. Д. (Генерирует комментарии в базе кода):

http://api13.cakephp.org/classes

HTH. : D

person OpenSorceress    schedule 11.06.2011
comment
Вопрос был о зарезервированных именах таблиц, таких как таблицы моделей и объектов, которые в соответствии с соглашением об именах CakePHPs станут моделями и объектами, и cake уже использует эти классы. Если бы я использовал, например, $ this- ›Model-› ​​что-нибудь, это не сработало бы. - person Pehmolelu; 11.06.2011
comment
Да, я должен был сказать, что я хорошо знаю, как работают настоящие условности и пирожные. Вам бы не пришлось писать это для меня по буквам, но все равно спасибо;) Последнее предложение, однако, было ответом на мой первый вопрос, спасибо :) - person Pehmolelu; 11.06.2011
comment
Я должен был быть более подробным по второму вопросу, я не имел в виду, что хочу нарушить условности, я просто подумал, есть ли способ, которым этого не делать. У меня есть объекты таблицы, и я не могу использовать их просто так, потому что этот класс Object уже существует. Итак, мой вопрос в том, как заставить его работать, если мне действительно нужно иметь таблицу объектов в моей базе данных. И если нет хорошего способа, было бы лучше всего добавить префикс в начале, например: my_objects. - person Pehmolelu; 11.06.2011

По опыту я знаю, что вы не можете использовать имена таблиц, такие как «файлы» и «модели», потому что они создают классы, которые уже используются Cake для других вещей, таких как File и Model.

Я не сталкивался с другими подобными проблемами, но уверен, что их можно найти.

Я бы посоветовал избегать использования любых имен, используемых в основных классах торта.

person 93196.93    schedule 09.11.2011
comment
Меня просто поразило это (Торт 2.2). Я использую веб-приложение с моделью под названием File без проблем уже более года. Теперь я наконец использую систему схемы Cake и получаю странную ошибку: Таблица 1 для модели Файл не был найден в источнике данных, что, я почти уверен, связано с конфликтом имен с основным классом. Cake до сих пор ни разу не выдавал ошибку! - person Adam Friedman; 08.01.2015
comment
Да, некоторое время назад. Это больно, но я думаю, вы сможете сделать это в версии 3.0, используя пространства имен. - person 93196.93; 21.01.2015

Я знаю, что это немного старая тема, но я просто наткнулся на нее в поисках чего-то другого. Я думаю, это поможет ответить на вопрос №2. В database.php вы можете добавить свой префикс таблицы db в DATABASE_CONFIG class /app/config/database.php. См. Последний ключ в массиве конфигурации ниже:

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'database_name',
    'prefix' => '',
);
person iamdash    schedule 08.12.2011