Php 三个表之间的拉维关系
我有三张桌子:Php 三个表之间的拉维关系,php,laravel,orm,eloquent,model,Php,Laravel,Orm,Eloquent,Model,我有三张桌子: 事件 年代 书 我用下面的方式把它们联系起来: 年代 身份证 名字 书 身份证 头衔 年鉴 身份证 年龄 书号 事件 身份证 名字 事件时间 身份证 事件id 年龄 事件·年龄·书 事件\u年龄\u id 书号 基本上,一本书可以有很多时代,一个时代可以有很多书,一个事件可以有很多时代,一个事件时代可以有很多书 我的事件模型看起来像这样,可以很好地获得所有事件年龄 类事件扩展模型 { 公共职能年龄() { 返回$this->belongstomy(
- 事件
- 年代
- 书
- 年代
- 身份证
- 名字
- 书
- 身份证
- 头衔
- 年鉴
- 身份证
- 年龄
- 书号
- 事件
- 身份证
- 名字
- 事件时间
- 身份证
- 事件id
- 年龄
- 事件·年龄·书
- 事件\u年龄\u id
- 书号
类事件扩展模型
{
公共职能年龄()
{
返回$this->belongstomy(年龄::类,“事件年龄”);
}
}
年龄模型:
班级年龄扩展模型
{
公共功能书():属于
{
退还$this
->归属(书::类)
->带时间戳();
}
}
图书模型
类目扩展模型
{
公共函数ages():属于
{
退还$this
->属于名称(年龄::类,“图书年龄”、“图书id”和“年龄id”)
->带时间戳();
}
}
我很难弄清楚如何获取所有版本的书籍,是否可以在事件模型上这样做?让我们回顾一下这些关系
看起来你只需要3个模型和5张桌子
- 书籍属于时代
- 事件属于时代
- 时代属于书籍
- 时代属于事件
class Age extends Model
{
public function books(): BelongsToMany
{
return $this->belongsToMany(Book::class)
->withTimestamps();
}
public function events(): BelongsToMany
{
return $this->belongsToMany(Events::class,'event_age')
->withTimestamps();
}
}
这将允许:
$books->ages;
$events->ages;
$ages->book;
$ages->events;
和链接
$books = collect();
foreach($event->ages as $age){
$books->merge($ages->books);
}
$books->unique();
书籍和活动
所以,我不认为你想要age\u event\u book
s。我想你真正想要的是:
- 事件属于书本
- 书籍属于事件
book_events
- id
- book_id
- event_id
- age_id
你会在书中看到:
public function events()
{
return $this->BelongsToMany('App\Event')
->withTimestamps()
->withPivot('age_id');
}
如果:
public function books()
{
return $this->belongsToMany('App\Book')->withTimestamps()
->withPiviot('age_id')->groupBy('age_id');
}
给你:
$event->books
$book->events
在前端
[O] 在前端,我需要按年龄获取最新的活动和分组书籍,书籍可以属于多个年龄
然后在刀刃上
@foreach($books as $age_id => $books)
<h4>{{Age::find($age_id)->name}}</h4>
@foreach($books as $book)
<div>$book->name</div>
@endforeach
@endforeach
@foreach($books as$age\u id=>$books)
{{Age::find($Age\u id)->name}
@foreach($books作为$book)
$book->name
@endforeach
@endforeach
有用的提示
您提供的是关系表,您必须这样做,因为您没有遵循连接表的命名约定。按照惯例,要加入的类应该按字母顺序列出。因此,
event\u event
而不是event\u age
我很难弄清楚为什么你有最后一本表event\u age\u书似乎是多余的,而且容易让你的生活变得不必要的复杂。也许你可以解释一下为什么需要最后一张表?@J.A.Streich我需要事件年龄书,因为一个事件年龄只有几个选定的书,而不是所有与该年龄相关的书。我需要年龄事件书,因为年龄事件只有几个选定的书,而不是所有与该年龄相关的书。谢谢你的回复。那一定是一个老年活动吗。。。。(意味着另一个模型和一堆更多的关系)或者它比一个事件有很多书更重要。一个事件有很多书其实并不重要,只是事件年龄有很多书,事件有很多年龄,因为在前端,我需要按年龄获取最新的活动和分组书籍,书籍可以属于多个年龄段。我认为这是不可能的,因为对于活动年龄段,我只想从该年龄段中选择几本书,并且选定的一本书也可以为同一事件的另一年龄段选择。已编辑。这是一幅草图。它可以进行更多的优化,但它可以让你得到imgur所展示的东西。
@foreach($books as $age_id => $books)
<h4>{{Age::find($age_id)->name}}</h4>
@foreach($books as $book)
<div>$book->name</div>
@endforeach
@endforeach