Стол поворота 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