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

Что такое сводные таблицы laravel и сводные таблицы в целом? Что все это значит?

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

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

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

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

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

ладно, пусть будет так. Пивот фреймворк Laravel просто многие ко многим!

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

модель class Room_Student extends Pivot

и что исправить? Просто меняю его на class Room_Student extends Model.

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

Итак, мой вопрос в том, какие сводные таблицы на самом деле? + Сводные таблицы Laravel. Они разные? Что это о?

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

4 ответов


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

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

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

enter image description here

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

пример:

//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;

}

Примечание: Вы можете создать класс, расширяя pivot. Но вы должны реализовать правильные отношения, чтобы заставить его работать. Ваш код должен выглядеть примерно ниже код.

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
{
    //
}

Я надеюсь, что это помогает.


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

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

USERS:
user_id, user_name

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

GAMES
game_id, game_name

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

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

GAMES_TO_USERS
game_id, user_id

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

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


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

таблица: человек

|------|-------|-----|
|  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 и Марта имеет BSc, теперь это рассмотреть как многие ко многим отношения и сортировать это отношение вам нужно иметь промежуточную таблицу, такую как,

таблица: 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'); 
}

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

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


фреймворк Laravel часть - laravel обеспечивает многие-ко-многим отношения, где вы можете использовать pivot table, и это очень полезно для многих случаев.

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

пользователей.в PHP (модель)

class User extends Model{

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

}

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

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

взаимоотношения случилось:

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

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

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

выход:

  • PostName1
  • PostName2
  • PostName3
  • PostName4