如何使用 Laravel 将两个表与数据透视表连接起来?

Posted

技术标签:

【中文标题】如何使用 Laravel 将两个表与数据透视表连接起来?【英文标题】:How to join two tables with a pivot table using Laravel? 【发布时间】:2020-06-24 20:32:24 【问题描述】:

我有这三个表:

tbl_lista_contactabilidad  tbl_equipo_postventaatc  users
-------------------------  -----------------------  -----
id                         id                       id
usuarios_id                asesor_id                name

tbl_lista_contactabilidad.usuarios_id 应该与tbl_equipo_postventaatc.asesor_id 相关联。 asesor_id 应该是 tbl_lista_contactabilidad.usuarios_idusers.id 之间的“枢轴”以建立关系。

我想建立这种关系,所以我尝试以这种方式建立这种关系(我只会放模型的关系)

Tbl_Lista_Contactabilidad(模型 1)

public function postventaatc()

return $this->belongsTo('App\Models\Tbl_EquipoPostventaatc','usuarios_id');


Tbl_Equipo_Postventaatc (Model 2) -> 这应该是枢纽模型

public function contactabilidad()

return $this->hasMany('App\Models\Tbl_Lista_Contactabilidad','usuarios_id');



public function user()

return $this->belongsTo('App\Models\User','asesor_id');


用户(模型 3)

public function postventaatc()

return $this->hasMany('App\Models\Tbl_Lista_Postventaatc','asesor_id');


示例:

正如您在图片中看到的...如果我将 usuarios_id 直接与用户相关联,我将获得另一个名称,但我不想要那个...我想要与图片中一样的关系

【问题讨论】:

事情很简单。仅查看数据库模型中的表,Model.php 将是相同的。但无论如何,我认为您应该向我们展示您的数据库模型中的表格或表格结构,以了解如何简洁地回答我们的答案。 只有我想要的是关系...我不需要为此显示表格...关系将与查询相同..所以查询就足够了建立关系 这能回答你的问题吗? How to join three table by laravel eloquent model 不,因为他没有使用数据透视表...他只是将两个表分别与另一个表连接 ***.com/questions/29165410/… 【参考方案1】:

数据透视表是一种结构,用于将两个单独的模型与单个关系连接在一起。这在 Eloquent 中称为many-to-many relationship。

根据您的描述,这里不是这种情况。相反,它看起来像 has-many-through 关系。

如果我的理解正确,你们的关系应该是这样的:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Tbl_Lista_Contactabilidad extends Model 
    protected $table = 'tbl_lista_contactabilidad';
    public function postventaatc() 
        return $this->belongsTo(Tbl_EquipoPostventaatc::class, 'usuarios_id');
    


class Tbl_EquipoPostventaatc extends Model 
    protected $table = 'tbl_equipo_postventaatc';
    public function contactabilidad() 
        return $this->hasMany(Tbl_Lista_Contactabilidad::class, 'usuarios_id');
    


class User extends Model 
    public function postventaatc() 
        return $this->belongsTo(Tbl_EquipoPostventaatc::class, 'asesor_id');
    
    public function contactabilidad() 
        return $this->hasManyThrough(Tbl_Lista_Contactabilidad::class, Tbl_EquipoPostventaatc::class, 'asesor_id', 'usuarios_id');
    

显然,这对于以英语为母语的人来说更容易,但我无法强调如果你遵循 Laravel 关于命名模型、表格和列的规则,这将变得多么容易。为什么usuarios_id 列与名为tbl_equipo_postventaatc 的表相关?为什么使用asesor_id 而不是user_id? ??‍♂️ 这些名字彼此没有任何关系,让人很难弄清楚是怎么回事。

【讨论】:

感谢您的回答...运行代码时出现此错误-----尝试获取非对象的属性“名称”..你知道为什么吗?名称来自 tbl 用户 用户没有直接关联,因为 usuarios_id 与 asesor_id 匹配...我需要 asesor_id 知道用户的哪个 id 与 usuarios_id 对应 您需要添加一些示例数据并在此处提供更清晰的关系说明。如果usuarios_idasesor_id 相同,与users.id 相同,那么我看不到问题吗? 例如... usaios_id 的数字是 3,asesor_id 的数字是 ..6,我想从用户那里调用第三个 ID...我正在处理大量数据。 . 所以... 如果我用 usuarios_id 的数字 3 调用第三个用户,将调用另一个名称,如果我用 asesor_id 调用数字 6... 所以 usuarios_id 的数字 3 应该与 asesor_id 的 6 相关联。 .然后调用用户的第三个ID与usuarios_id建立关系 我不明白。请使用示例数据更新您的问题。

以上是关于如何使用 Laravel 将两个表与数据透视表连接起来?的主要内容,如果未能解决你的问题,请参考以下文章

在 Eloquent 中将数据透视表与多个表连接起来

是否可以在 Laravel 中获取数据透视表与另一个表的关系?

Laravel多态多对多关系数据透视表与另一个模型的关系

如何通过laravel创建数据透视表

Laravel 如何创建数据透视表?

交叉表与透视变