php - 如何使用 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_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 直接与用户相关联,我将获得另一个名称,但我不想要那个...我想要图像中的关系
解决方案
数据透视表是一种结构,用于将两个单独的模型与单个关系连接在一起。这在 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_id
column 与名为 的表相关tbl_equipo_postventaatc
?为什么使用asesor_id
而不是user_id
?♂️这些名字彼此无关,很难弄清楚发生了什么。
推荐阅读
- python - pandas read_csv 问题/警告
- r - Average Sample Number using Page's CUSUM procedure?
- mysql - Grafana 显示 MySQL 连接数
- javascript - 如何从数组中生成带有名称的标记表并在旁边显示文本框?
- javascript - Gulp sass 默默地失败
- angular - Angular TypeScript如何查看父组件中动态生成的子组件的特定值
- .htaccess - 启用 www 时出错。来自 Drupal 8 .htaccess 文件
- python - 使用 Python 时如何在 Google Colab 中引用文件?
- python - 在 plt.plot 的 for 循环中更改标题并创建 6x16 子图
- java - Spring Boot 配置中列表的环境变量