Стол поворота Laravel + сводная таблица в целом

Что такое общие таблицы поворота и сводные таблицы? Что это значит?

Недавно я сделал исследование о сводной таблице. Я думал, что знаю их, и что это такое, но тогда я, вероятно, ошибся.

Я всегда считал, что сводная таблица - это просто таблица, которая находится между двумя таблицами (отношение много для многих)

Но потом я начал это исследование, и это случилось не так, но что-то вроде другой архитектуры обычной таблицы, где строки - столбцы. Он изменился.

Но тогда Laravel тоже получил сводные таблицы. Начал читать документацию и делать исследования. Может быть, я ошибаюсь, но это похоже на просто сводную таблицу в таблице laravel между двумя таблицами, многие-ко-многим.

Поиск в другом месте, но не может найти правильную информацию об этом.

Хорошо, да будет так. Laravel поддерживает множество ко многим!

Затем я начал проект, и сегодня я пришел к тому, что превращение этой промежуточной таблицы в качестве поворота привело меня к проблеме, у меня была проблема с этим... минуты и часы... не удалось это исправить.

Модель была class Room_Student extends Pivot

И что было исправлением? Просто изменив его на class Room_Student extends Model.

Я не думаю, что я больше понимаю сводные таблицы и являются ли они разными типами опорных точек? Разновидности Laravel различны?

Итак, мой вопрос в том, что представляют собой сводные таблицы? + Таблицы поворота Laravel. Разве они разные? Что это значит?

Пожалуйста, помогите мне понять это.

Ответ 1

При обучении сосредоточьте только концепцию сводных таблиц в Laravel (или красноречивый). Когда я учился, меня не волновало общее значение сводной таблицы. Я сосредоточился только на фактах в документации (https://laravel.com/docs/5.5/eloquent-relationships#many-to-many)

отношения many-to-many требуют дополнительной таблицы. И мы также можем вставить другие полезные данные в эту таблицу. И может использоваться как модель в системе.

Пример: Пользователь и роли отношения "многие-ко-многим" = User_roles

введите описание изображения здесь

Из-за сводных таблиц вы можете получить данные промежуточной таблицы в качестве модели (например, другие модели в системе).

Пример:

//get user by id
$user = App\User::find(1);

//get roles of this user
foreach ($user->roles as $role) {

  //pivot attribute returns a model which represent user_role table
  echo $role->pivot->created_at;

}

ПРИМЕЧАНИЕ. Вы можете создать класс, расширив опорный стержень. Но вы должны реализовать правильные отношения, чтобы заставить его работать. Ваш код должен выглядеть примерно так, как показано ниже.

class Student extends Model
{
    /**
     * The users that belong to the role.
     */
    public function Rooms()
    {
        return $this->belongsToMany('App\Room')->using('App\Room_Student');
    }
}

class Room extends Model
{
    /**
     * The users that belong to the role.
     */
    public function Students()
    {
        return $this->belongsToMany('App\Student')->using('App\Room_Student');
    }
}

class Room_Student extends Pivot
{
    //
}

Надеюсь, это поможет.

Ответ 2

Проще говоря, сводная таблица представляет собой таблицу, которая объединяет две таблицы вместе

скажем, у вас есть пользователи таблицы

USERS:
user_id, user_name

сказать, что у вас есть настольные игры

GAMES
game_id, game_name

пользователь может играть во многие игры. в играх есть много пользователей, играющих их.

Чтобы связать их, вы делаете третью таблицу

GAMES_TO_USERS
game_id, user_id

с этой таблицей вы можете запросить игры, которые пользователь играет, и какие пользователи играют в эту игру.

эта таблица GAMES_TO_USERS является в этом случае сводной таблицей.

Ответ 3

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

table: person

|------|-------|-----|
|  id  | name  | age |
|------|-------|-----|
|  1   | Bob   | 30  |
|  2   | John  | 34  |
|  3   | Marta | 28  |
|------|-------|-----|

таблица: образование

|------|-------|
|  id  | level |
|------|-------|
|  1   | BSc   |
|  2   | MSc   |
|  3   | PhD   |
|------|-------|

Подумайте, что у Боба есть BSc, MSc, а у Джона есть BSc, MSc, PhD и Marta - BSc, теперь это считается отношением "многие ко многим" и для сортировки этих отношений вам нужно иметь промежуточную таблицу, такую ​​как

table: person_education

|------------|--------------|
|  person_id | education_id |
|------------|--------------|
|  1         |    1         |
|  1         |    2         |
|  2         |    1         |
|  2         |    1         |
|  2         |    3         |
|  3         |    1         |
|------------|--------------|

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

  • Название сводной таблицы должно состоять из сингулярных имен обоих таблицы, разделенные символом undescore, и эти имена должны быть расположенных в алфавитном порядке

Laravel Ex:

Class Person extends Model {
    public function education ()
    {   
      return $this->belongsToMany('App\Education', 'person_education');
    }
}

Кроме того, вы можете указать фактические имена полей этой сводной таблицы, если они отличаются от по умолчанию person_id и education_id. Затем просто добавьте еще два параметра - во-первых, текущее поле модели, а затем поле модели, соединяющееся

public function education() { 
  return $this->belongsToMany('App\Products', 'products_shops', 'shops_id', 'products_id'); 
}

Ответ 4

Имейте это в виду

сводная таблица - это таблица, используемая для соединения отношений между двумя таблицами.


Часть Laravel - laravel обеспечивает many-to-many, где вы можете использовать pivot table, и это очень полезно для во многих случаях.

Пример:
базы данных: users, post_user, posts

User.php (модель)

class User extends Model{

  public function posts(){
     return $this->belongsToMany('Post');
  }

}

Теперь, чтобы получить доступ ко всем зарегистрированным сообщениям пользователя: (просмотреть)

@foreach(auth()->user()->posts as $post)
  <li>{{ $post->name }}</li>
@endforeach

Отношения произошли:

Помните, что у нас есть таблица post_user, которая является сводной таблицей, которую мы использовали. Если мы имеем:

user_id of 1, и мы ожидаем, что он является зарегистрированным пользователем и post_id из 1, 2, 3, 4, все эти сообщения будут распечатаны так же

|------------|--------------|
|  post_id   |   user_id    |
|------------|--------------|
|  1         |    1         |
|  2         |    1         |
|  3         |    1         |
|  4         |    1         |
|------------|--------------|

Вывод:

  • PostName1
  • PostName2
  • PostName3
  • PostName4