使用数据透视表数据获取关系表的信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用数据透视表数据获取关系表的信息相关的知识,希望对你有一定的参考价值。
我正在使用Laravel 5.4。我有2张桌子destination
和user
以及一个支点表destination_user
。
目的地表
---|------
id | name
---|------
1 | sth
用户表
---|------
id | name
---|------
1 | sth
最后是数据透视表
--------------|--------
destination_id| user_id
--------------|--------
1 | 1
2 | 1
3 | 2
我为名为destinationUser
的数据透视表创建了一个模型。
我的destination
模型看起来像这样:
<?php
namespace Appmodels;
use AppModelsUser;
use AppModelsDestinationUser;
use AppModelsDestinationImage;
use IlluminateDatabaseEloquentModel;
class Destination extends Model
{
protected $table = 'destinations';
public function user() {
return $this->belongsToMany('AppModelsUser');
}
public function destinationUser() {
return $this->hasMany('AppModelsDestinationUser');
}
}
我想使用数据透视表获取所有目的地及其各自的用户详细信息。我到目前为止尝试的是:
$destinations = $this->destination->with('user', 'destinationUser')
->whereHas('destinationUser', function($query) {
$query->where('user_id', user()->id);})
->paginate(20);
dd($destinations[0]->destinationUser);
给了我destination id
和user id
,但我想要用户细节。我怎样才能做到这一点。谢谢您的帮助
答案
你需要多对多的关系:
class Destination extends Model
{
protected $table = 'destinations';
public function destinationUser() {
return $this->belongsToMany('AppUser');
}
}
调节器
$destinations = $this->destination->with('destinationUser', function($query) {
$query->where('user.id', user()->id);})
->paginate(20);
另一答案
当我在寻找更快的查询执行时,表的设计是错误的。对于带有数据透视表的3个表而不是没有数据透视表的2个表,有更多的执行负载和时间。所以,我想出来并纠正了。
以上是关于使用数据透视表数据获取关系表的信息的主要内容,如果未能解决你的问题,请参考以下文章