我正在使用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 App\models;
use App\Models\User;
use App\Models\DestinationUser;
use App\Models\DestinationImage;
use Illuminate\Database\Eloquent\Model;
class Destination extends Model
{
protected $table = 'destinations';
public function user() {
return $this->belongsToMany('App\Models\User');
}
public function destinationUser() {
return $this->hasMany('App\Models\DestinationUser');
}
}
我想使用数据透视表获取所有目的地及其各自的用户详细信息。我到目前为止试过这个:
$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
,但我想要用户详细信息。我怎样才能做到这一点。谢谢你的帮助
答案 0 :(得分:0)
你需要多对多的关系:
class Destination extends Model
{
protected $table = 'destinations';
public function destinationUser() {
return $this->belongsToMany('App\User');
}
}
控制器
$destinations = $this->destination->with('destinationUser', function($query) {
$query->where('user.id', user()->id);})
->paginate(20);
答案 1 :(得分:0)
当我在寻找更快的查询执行时,表的设计是错误的。对于带有数据透视表的3个表而不是没有数据透视表的2个表,有更多的执行负载和时间。所以,我想出来并纠正了。