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

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

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

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

  1. Названия таблиц в единственном числе (например, Post)
  2. Имена столбцов в единственном числе (например, userId — идентификатор пользователя в таблице записей)
  3. Верблюжий корпус для нескольких слов в именах таблиц (например: PostComment, PostReview, PostPhoto)
  4. Оболочка верблюда для нескольких слов в именах столбцов (например: firstName, postCategoryId, postPhotoId)

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

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

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

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

24

Решение

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

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

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

Обратите внимание, что мы не указали Eloquent, какую таблицу использовать для нашей модели User.
В качестве имени таблицы будет использовано имя класса во множественном числе в нижнем регистре.
если другое имя не указано явно. Так что, в этом случае, Eloquent
будет предполагать, что модель пользователя хранит записи в таблице пользователей. Вы можете указать
пользовательская таблица путем определения $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 красноречивые отношения

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

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

31

Другие решения

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

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

Имена таблиц должны быть во множественном числе, т. Е. Таблица ‘users’ для модели User.

И имена столбцов должны быть не в случае верблюда, а в случае змеи. Смотри уже ответили Соглашение об имени поля базы данных / модели в Laravel?

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

6

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

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

-1
По вопросам рекламы [email protected]