首页 > 解决方案 > 如何使用 Laravel 将两个表与数据透视表连接起来?

问题描述

我有这三个表:

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 直接与用户相关联,我将获得另一个名称,但我不想要那个...我想要图像中的关系

标签: phplaraveleloquent

解决方案


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

根据您的描述,这里不是这种情况。相反,它看起来像是一个有很多的关系。

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

<?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_idcolumn 与名为 的表相关tbl_equipo_postventaatc?为什么使用asesor_id而不是user_id?‍♂️这些名字彼此无关,很难弄清楚发生了什么。


推荐阅读