如何在 laravel 中关联三个模型?

Posted

技术标签:

【中文标题】如何在 laravel 中关联三个模型?【英文标题】:How to relate three models in laravel? 【发布时间】:2020-06-23 11:16:31 【问题描述】:

我正在尝试在 laravel 中关联三个模型

这是我的第一个模型

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Tbl_Lista_Contactabilidad extends Model

protected $table = "tbl_lista_contactabilidad";
protected $fillable = [
'id', 'postventaatc_id', 'rif', 'razon_social', 'estatus', 'fecha_contacto', 'persona_contacto', 'correo_contacto', 'celular_contacto', 'numero_contacto', 'comentarios', 'contactado', 'auditado'
];
protected $guarded = ['id'];

public function postventaatc()

return $this->belongsTo('App\Models\Tbl_Equipo_Postventaatc','postventaatc_id');


这是第二个模型...我正在尝试将此模型用作其他两个模型之间的桥梁

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Tbl_Equipo_Postventaatc extends Model

protected $table = "tbl_equipo_postventaatcs";
protected $fillable = [
'asesor_id', 'carteras_id', 'supervisor_id', 'skillcontacs_id', 'workgroupcontacs_id', 'estatus'
];
protected $guarded = ['id'];
public function users()
return $this->belongsTo('App\User','asesor_id');

public function contactabilidad()

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

这是我的第三个模型...我想加入第一个模型

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model

protected $table = "users";
protected $fillable = [ 
    'idop', 'name', 'apellido', 'cedula',
    'fecha_nacimiento', 'fecha_ingreso', 'extension',
    'movil', 'tel_hab', 'email', 'password', 'generos_id',
    'empresas_id', 'gerencias_id', 'cargos_id',
    'direccion_personales_id', 'nivelacademicos_id',
    'personal_guardia', 'estatus',
];
protected $guarded = ['id'];

public function postventaatc()
return $this->hasMany('App\Models\Tbl_Equipo_Postventaatc','asesor_id');


我正在尝试为这个函数关联这三个模型

public function map($contactabilidad): array

    return [

        $contactabilidad->postventaatc_id,
        $contactabilidad->postventaatc->name,
        $contactabilidad->rif,
        $contactabilidad->razon_social,
        $contactabilidad->fecha_contacto,
        $contactabilidad->persona_contacto,
        $contactabilidad->correo_contacto,
        $contactabilidad->numero_contacto,
        $contactabilidad->celular_contacto,
        $contactabilidad->comentarios,
        $contactabilidad->contactado,
        $contactabilidad->respuesta->respuesta
    ];

但是我得到了这个错误“ErrorException 试图获取非对象的属性“名称””

我该怎么办?

【问题讨论】:

【参考方案1】:

请查看 HasManyThrough Eloquent 关系

您必须在 Tbl_Equipo_Postventaatc 类中编写 tblListaContactabilidad() 方法,该方法将返回 HasManyThrough。

public function tblListaContactabilidad(): HasManyThrough
    
        return $this->hasManyThrough(
            Tbl_Lista_Contactabilidad::class,
            User::class,
            *firstKey*,
            *secondKey*,
            **localKey**,
            *secondLocalKey*
        );

理论:https://laravel.com/docs/5.8/eloquent-relationships#has-many-through

【讨论】:

以上是关于如何在 laravel 中关联三个模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ActiveRecord 中关联两个加入模型?

如何对rails中关联记录的jquery数据表列进行排序

在 Diesel 中关联三个表(多对多关系)的标准模式是啥?

Laravel:级联删除模型,如果没有其他模型共享它

如何在 Python 中关联两个音频事件(检测它们是不是相似)

如何在 Windows 10 中关联 cgi 扩展