Intereting Posts
Facebook, Attachment Недоступная ошибка при использовании кнопки отправки? PHP foreach loop для заполнения выпадающего списка со значениями из массива массивов SQL QUERY многократный поиск в одной строке для поиска данных из другой строки в одной таблице Использует microtime () для создания неудачных методов токена сброса пароля Можно ли добавить идентификатор (вставить в БД) в скрытый ввод? Является ли это безопасным использованием переменных сеанса? Как проверить, является ли один символ нижним регистром в PHP? Разница между <? Php?> И <script language = "php"> </ script> Создание безопасного входа в систему с использованием сеансов и файлов cookie в PHP PHP: замена абсолютных URL-адресов в текстовом поле Как использовать jQuery AJAX для внешнего домена? HTML5 и getUserMedia – запись аудио и сохранение на веб-сервер через определенное время PHP Base 64 Данные изображения не работают в теге изображения? Как использовать класс мыла в php (с примером)? Политика Laravel всегда неверна

hasMany vs принадлежит ToMany в laravel 5.x

Мне любопытно, почему отношения Eloquent для hasMany имеют другую подпись, чем для belongsToMany . В частности, пользовательское имя таблицы соединений – для системы, в которой данный Comment принадлежит ко многим Role s, и у данной Role будет много Comment s, я хочу сохранить отношение в таблице с именем my_custom_join_table и настроить ключи как comment_key и role_key .

 return $this->belongsToMany('App\Role', 'my_custom_join_table', 'comment_key', 'role_key'); // works 

Но в обратном я не могу определить эту пользовательскую таблицу (по крайней мере, в документах это не упоминается):

 return $this->hasMany('App\Comment', 'comment_key', 'role_key'); 

Если у меня есть объект Role , у которого есть hasMany Comments , но я использую нестандартное имя таблицы для хранения этих отношений, почему я могу использовать эту нестандартную таблицу, идущую в одну сторону, а не другую?

Solutions Collecting From Web of "hasMany vs принадлежит ToMany в laravel 5.x"

hasMany используется в отношениях от одного до многих, в то время как принадлежит belongsToMany относится к отношениям Many to Many . Они оба представляют собой различные типы отношений, и для каждого из них требуется другая структура базы данных, поэтому они принимают разные параметры.

Основное различие заключается в том, что в отношениях от одного до многих вам нужны только две таблицы базы данных, соответствующие соответствующим моделям. Это связано с тем, что ссылка на отношение хранится в собственной таблице модели . Например, у вас может быть модель Country модель City . В стране много городов. Однако каждый Город существует только в одной стране. Поэтому вы бы сохранили эту страну в самой модели города (как country_id или что-то в этом роде).

Однако для отношения «многие ко многим» требуется третья таблица базы данных, называемая сводной таблицей . В сводной таблице хранятся ссылки на обе модели, и вы можете объявить ее как второй параметр в объявлении отношений. Например, представьте, что у вас есть модель City и у вас также есть модель Car . Вы хотите, чтобы отношения показывали типы автомобилей, которые люди ездили в каждом городе. Ну, в одном городе люди будут ездить на многих разных типах автомобилей. Однако, если вы посмотрите на один тип автомобиля, вы также узнаете, что его можно проехать в разных городах. Поэтому было бы невозможно сохранить city_id или car_id на любой модели, потому что у каждого было бы больше одного. Поэтому вы помещаете эти ссылки в сводную таблицу.

Как правило, если вы используете отношение belongsToMany , оно может быть сопряжено только с другим отношением belongsToMany и означает, что у вас есть третья сводная таблица. Если вы используете отношения hasMany , его можно hasMany только с отношением belongsTo и дополнительные таблицы базы данных не требуются.

В вашем примере вам просто нужно сделать обратное отношение в belongsToMany и добавить свою собственную таблицу снова, а также внешние и локальные ключи (изменение порядка с другой модели).

Попытайтесь понять текст и цифру.

  1. Отношения один к одному (hasOne):

    • Пользователь имеет (может иметь) один профиль. Таким образом, профиль принадлежит одному пользователю.
  2. Один для многих (hasMany):

    • У пользователя много (может быть много) статей. Таким образом, многие статьи принадлежат одному пользователю.
  3. Многим многим (BelongsToMany):

    • Пользователь может принадлежать многим форумам. Итак, форум принадлежит многим пользователям.

    связь