Laravel eloquent join 与三个表

Posted

技术标签:

【中文标题】Laravel eloquent join 与三个表【英文标题】:Laravel eloquent join with three tables 【发布时间】:2020-10-25 07:44:27 【问题描述】:

我开始从事一个小型 Laravel 项目,我想加入三个表来获取客户组织,因为一个客户可以在多个组织中。

我有三个表:usersorganizationsclient_organizations

我如何获得用户 ID 等于 1 的客户组织,例如,使用 eloquent:

这是我的表格结构:

组织机构表:

public function up()

    Schema::create('organizations', function (Blueprint $table) 
        $table->bigIncrements('id');

        $table->string('organization_name');
        $table->string('phone');
        $table->string('fax');
        $table->string('address');
        $table->string('city');
        $table->string('zipcode');
        $table->string('website');
        $table->string('linkedin');
        $table->string('facebook');
        $table->string('twitter');
        $table->timestamps();

    );

客户组织:

public function up()

    Schema::create('client_organizations', function (Blueprint $table) 
        $table->bigIncrements('id');

        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');



        $table->bigInteger('organization_id')->unsigned();
        $table->foreign('organization_id')->references('id')->on('organizations');
        
        $table->timestamps();
    );

注意:我还有 Laravel Auth 附带的 Users 表。

【问题讨论】:

阅读Many to many关系 【参考方案1】:

您不需要三个表,而您的案例有一个数据透视表。

return DB::table('client_organizations')
    ->join('organizations', 'organizations.id', '=', 'organization_id')
    ->where('user_id', 1)
    ->get([
        'organizations.*'
    ]);

您可以将DB::table('client_organizations') 替换为client_organizations 表的型号名称。

【讨论】:

以上是关于Laravel eloquent join 与三个表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent Join vs Inner Join?

Laravel Eloquent 关系——相当于 MYSQL “join”

Laravel Eloquent ORM 中的 join()->where()

laravel eloquent JOIN ON 多个条件

Laravel/Eloquent/DB 查询 - 当为空且不为空时加入

Laravel Eloquent ORM - 获取第一个和第三个表数据