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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用数据透视表数据获取关系表的信息相关的知识,希望对你有一定的参考价值。

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

以上是关于使用数据透视表数据获取关系表的信息的主要内容,如果未能解决你的问题,请参考以下文章

(Laravel)通过数据透视表的多态关系

如何获取附加数据透视表的数据?

laravel 使用具有多对多关系数据透视表的策略

Laravel 与数据透视表的关系,关系?

数据透视表的laravel关系问题

是否可以通过 Power BI 获取数据透视表的来源?