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

问题描述 投票:0回答:2

我正在使用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,但我想要用户细节。我怎样才能做到这一点。谢谢您的帮助

php laravel-5 pivot laravel-5.4
2个回答
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);

0
投票

当我在寻找更快的查询执行时,表的设计是错误的。对于带有数据透视表的3个表而不是没有数据透视表的2个表,有更多的执行负载和时间。所以,我想出来并纠正了。

© www.soinside.com 2019 - 2024. All rights reserved.