如何使用 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_id
和 users.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_id
与asesor_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 将两个表与数据透视表连接起来?的主要内容,如果未能解决你的问题,请参考以下文章