Подтвердить что ты не робот

Laravel - Соглашения о присвоении имен в базе данных, таблицах и столбцах?

Я использую красноречивые объекты данных laravel для доступа к моим данным, что лучший способ назвать мои таблицы, столбцы, внешние/первичные ключи и т.д.

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

Я думаю о следующем соглашении об именах:

  • Имена уникальных таблиц (например: Post)
  • Сингулярные имена столбцов (например: userId - идентификатор пользователя в таблице сообщений)
  • Корпус Camel для нескольких слов в именах таблиц (например, PostComment, PostReview, PostPhoto)
  • Корпус верблюда для нескольких слов в именах столбцов (например: firstName, postCategoryId, postPhotoId)

Таким образом, я мог бы использовать аналогичный синтаксис в контроллере.

$result = Post::where('postCategoryId', '4')->get();

Есть ли рекомендуемые рекомендации Laravel для этого? Могу ли я продолжить эти соглашения об именах?

Если у кого-то есть лучшие предложения, я буду очень рад их услышать. Спасибо большое!

4b9b3361

Ответ 1

У Laravel есть собственное соглашение об именах. Например, если ваше имя модели User.php, то Laravel ожидает, что класс "Пользователь" будет находиться внутри этого файла. Он также ожидает таблицу users для модели User. Однако вы можете переопределить это соглашение, указав свойство таблицы на своей модели, например,

    class User extends Eloquent implements UserInterface, RemindableInterface {
        protected $table = 'user';
    }

Из официальной документации Laravel:

Обратите внимание, что мы не сказали Eloquent, какую таблицу использовать для нашей модели User.     В нижнем регистре, множественном имени класса будет использоваться имя таблицы     если другое имя не указано явно. Итак, в этом случае, Красноречивый     предположим, что модель User хранит записи в таблице пользователей. Вы можете указать     пользовательская таблица, определяя свойство $table на вашей модели

Если вы будете использовать идентификатор таблицы пользователя в другой таблице в качестве внешнего ключа, тогда он должен быть змеиным, например user_id, чтобы его можно было использовать автоматически в случае связи. Опять же, вы можете переопределить это соглашение, указав дополнительные аргументы в функции отношений. Например,

    class User extends Eloquent implements UserInterface, RemindableInterface {
        public function post(){
            return $this->hasMany('Post', 'userId', 'id');
        }
    }

    class Post extends Eloquent{
        public function user(){
            return $this->belongsTo('User', 'userId', 'id');
        }   
    }

Документы для красноречивых отношений Laravel

Для других столбцов в таблице вы можете назвать их как хотите.

Я предлагаю вам пройти документацию один раз.

Ответ 2

Я не согласен в целом с этими примерами, которые вы оба показали прямо здесь.

Это чисто, если вы посмотрите на официальную документацию Laravel, особенно на сеансе отношений с Eloquent (http://laravel.com/docs/4.2/eloquent#relationships).

Названия таблиц должны быть во множественном числе, то есть в таблице пользователей для модели пользователя.

И имена колонок не обязательно должны быть в Case Camel, а в случае с Snake. См. Ответ уже ответил: Соглашение о названии поля базы данных/модели в Laravel?

Слишком часто вы видите, что это похоже на RedBeanORM: Снейк для столбцов, даже если вы попробуете другой. И рекомендуется избегать повторения имен таблиц с помощью столбцов из-за метода, который вы можете вызвать из объекта Model для доступа к их отношениям.

Ответ 3

Соглашения об именах таблиц по умолчанию могут легко вызвать конфликты с установкой нескольких пакетов, которые могут иметь, кстати, те же имена классов. Решение было бы назвать таблицы как: [vendor]. [Package]. [Class], что соответствует тому, как применяется пространство имен в Laravel.

Отредактировано. Однако использование точек в именах таблиц не рекомендуется. Будет ли альтернативное соглашение использовать для обеспечения разработчикам модульного встроенного приложения, не нужно беспокоиться о существующих именах таблиц.