使用数据透视表数据获取关系表的信息

时间:2017-12-21 05:15:05

标签: php laravel-5 pivot laravel-5.4

我正在使用Laravel 5.4。我有2个表destinationuser以及数据透视表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 iduser id,但我想要用户详细信息。我怎样才能做到这一点。谢谢你的帮助

2 个答案:

答案 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个表,有更多的执行负载和时间。所以,我想出来并纠正了。