Php 拉维尔';s透视表+;一般透视表
什么是laravel透视表和透视表?这是怎么回事 最近,我做了关于透视表的研究。我以为我了解他们,知道他们是什么,但我可能错了 我一直认为透视表只是两个表之间的表(多对多关系) 但后来我开始了这项研究,碰巧不是这样,而是像普通表的不同架构,行就是列。它变了 但拉威尔也有数据透视表。开始阅读文档并进行研究。也许我读错了,但它看起来就像是laravel中的透视表——两个表之间的表,多对多 在别处搜索,但找不到关于它的正确信息 好吧,就这样吧。拉威尔的支点只是多对多 然后我开始了这个项目,今天我说到了一点,把这个放在中间的表中作为pivot使我产生了一个问题,我有一个问题。。。分钟和小时。。。无法修复 模型是Php 拉维尔';s透视表+;一般透视表,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,什么是laravel透视表和透视表?这是怎么回事 最近,我做了关于透视表的研究。我以为我了解他们,知道他们是什么,但我可能错了 我一直认为透视表只是两个表之间的表(多对多关系) 但后来我开始了这项研究,碰巧不是这样,而是像普通表的不同架构,行就是列。它变了 但拉威尔也有数据透视表。开始阅读文档并进行研究。也许我读错了,但它看起来就像是laravel中的透视表——两个表之间的表,多对多 在别处搜索,但找不到关于它的正确信息 好吧,就这样吧。拉威尔的支点只是多对多 然后我开始了这个项目,今天我说到了
教室(U学生扩展轴
有什么办法?只需将其更改为教室\u学生扩展模型
我想我不再理解数据透视表了,它们是不同类型的数据透视吗?拉威尔的支点不同
所以我的问题是,什么是透视表拉威尔的透视表。它们不同吗?这是怎么回事
请帮助我理解这一点。学习时,只关注Laravel(或Elount)中的透视表概念。当我学习时,我并不关心pivot表的一般含义。我只关注文档中的事实() 多对多关系需要一个额外的表。我们还可以向该表插入其他有用的数据。并可作为系统中的一个模型 例如: 用户与角色多对多关系=用户与角色 由于数据透视表,您可以将中间表数据作为模型检索(与系统中的其他模型一样) 例如:
//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\u TO\u 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,现在考虑的是多对多关系,要排序这种关系,你需要有中间表,比如
表:个人教育|------|-------|
| id | level |
|------|-------|
| 1 | BSc |
| 2 | MSc |
| 3 | PhD |
|------|-------|
|------------|--------------|
| person_id | education_id |
|------------|--------------|
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 1 |
| 2 | 3 |
| 3 | 1 |
|------------|--------------|
此表主要存储每个关系的主键(ID)。这是透视表背后的基本思想,当您使用幼虫时,有一些最佳实践,例如
- 数据透视表的名称应由两个数据透视表的单数名称组成 表,由不得分符号分隔,这些名称应为 按字母顺序排列
Class Person extends Model {
public function education ()
{
return $this->belongsToMany('App\Education', 'person_education');
}
}
此外,如果数据透视表的实际字段名不同于默认的person\u id和education\u id,则可以指定它们。然后只需再添加两个参数,首先是当前模型字段,然后是要联接的模型的字段
public function education() {
return $this->belongsToMany('App\Products', 'products_shops', 'shops_id', 'products_id');
}
记住这一点透视表-用于连接两个表之间关系的表
Laravel部分-Laravel提供了可以使用透视表的关系,在许多情况下非常有用 示例:
数据库:
用户
,发布用户
,发布
User.php(模型)
现在,要访问所有登录用户的帖子:(查看)输出:
- 职位名称1
- 邮名2
- 邮名3
- 姓氏4
@foreach(auth()->user()->posts as $post)
<li>{{ $post->name }}</li>
@endforeach
|------------|--------------|
| post_id | user_id |
|------------|--------------|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
|------------|--------------|