一般来说,laravel数据透视表和数据透视表是什么?这是怎么回事?
最近我对Pivot表进行了研究。我以为我知道他们和他们是什么但是那时我可能错了。
我一直认为数据透视表只是两个表之间的表(多少个关系)
但后来我开始进行这项研究,而事实并非如此,而是像普通表的不同架构,其中行是列。它改变了。
但是Laravel也得到了数据透视表。开始阅读文档并进行研究。也许我读错了,但它看起来只是在laravel中的数据透视表 - 两个表之间的表,多对多。
在其他地方搜索但无法找到相关信息。
好的,就这样吧。 Laravel的支点只有很多甚至很多!
然后我开始了项目,今天我开始说这个中间表作为枢轴把我带到了一个问题,我有一个问题......分钟和小时......无法解决这一点。
模型是class Room_Student extends Pivot
解决了什么?只需将其更改为class Room_Student extends Model
。
我认为我不再了解数据透视表,他们是不同类型的支点吗? Laravel的支柱是不同的?
所以我的问题是,透视表到底是什么? + Laravel的数据透视表。他们不一样吗?这是关于什么的?
请帮助我理解这一点。
答案 0 :(得分:14)
学习时,只关注Laravel(或雄辩)中的数据透视表概念。当我在学习时,我并不关心数据透视表的一般含义。我只关注文档中的事实(https://laravel.com/docs/5.5/eloquent-relationships#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
{
//
}
我希望这会有所帮助。
答案 1 :(得分:3)
简单地说就是一个数据透视表,一个将两个表连接在一起的表
说你有一个表用户
USERS:
user_id, user_name
说你有桌上游戏
GAMES
game_id, game_name
用户可以玩很多游戏。游戏有很多用户在玩它们。
要链接它们,您需要制作第三张表
GAMES_TO_USERS
game_id, user_id
使用此表格,您可以请求用户玩哪些游戏,以及哪些用户玩哪种游戏。
此表GAMES_TO_USERS
在这种情况下是数据透视表。
答案 2 :(得分:2)
如果你知道多对多关系这很常见,为了处理多对多关系,我们使用中间(数据透视)表来存储两个表的关系。 例如:考虑下面列出的“教育”和“人”表
表:人|------|-------|-----|
| id | name | age |
|------|-------|-----|
| 1 | Bob | 30 |
| 2 | John | 34 |
| 3 | Marta | 28 |
|------|-------|-----|
表:教育
|------|-------|
| id | level |
|------|-------|
| 1 | BSc |
| 2 | MSc |
| 3 | PhD |
|------|-------|
认为Bob拥有BSc,MSc和John拥有BSc,MSc,PhD和Marta拥有BSc,现在这被认为是多对多的关系,并且要对这种关系进行排序,你需要有中间表,例如,
table:person_education
|------------|--------------|
| person_id | education_id |
|------------|--------------|
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 1 |
| 2 | 3 |
| 3 | 1 |
|------------|--------------|
该表主要存储每个关系的主键(ID)。这是数据透视表背后的基本思想,当你使用larval时,有一些最佳实践,例如,
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');
}
答案 3 :(得分:2)
牢记这一点
数据透视表 - 是用于连接两个表之间关系的表。
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
的{p> 1
我们希望它是已登录的用户post_id
1
,2
,3
,{ {1}},所有这些帖子都会打印出来:
4
<强>输出:强>