TransWikia.com

¿Cómo relacionar tres tablas en Laravel usando una de las tablas como tabla pivote?

Stack Overflow en español Asked on December 5, 2021

Quisiera hacer una relación de tres tablas usando una tabla pivote entre ellas…

Tabla 1 (tbl_lista_contactabilidad)

-id

-usuarios_id

(“usuarios_id” debería estar relacionada con asesor_id en la Tabla 2)


Tabla 2 (tbl_equipo_postventaatc) “Pivot Table”

-id

-asesor_id

(“asesor_id” debería ser el “pivote” entre usuarios_id y id de la tabla users para hacer la relación con la tabla 1 y tabla 2)


Tabla 3 (users)

-id

-name


Quiero hacer esta relación, he tratado de esta manera pero no lo he conseguido… (Pondré solo las relaciones de cada modelo)

Tbl_Lista_Contactabilidad (Model 1)

public function postventaatc(){

return $this->belongsTo('AppModelsTbl_EquipoPostventaatc','usuarios_id');

}

Tbl_Equipo_Postventaatc (Model 2) -> Este debería ser el pivote modelo

public function contactabilidad(){

return $this->hasMany('AppModelsTbl_Lista_Contactabilidad','usuarios_id');

}

public function user(){

return $this->belongsTo('AppModelsUser','asesor_id');

}

User (Model 3)

public function postventaatc(){

return $this->hasMany('AppModelsTbl_Lista_Postventaatc','asesor_id');

}

One Answer

Procede de está forma:

  • El método que se usa es belongsToMany
  • Elimina el modelo de la tabla pivote, no hay razón para que dicha tabla tenga esa representación
  • En los modelos users y (tbl_lista_contactabilidad) establece la relación, indicando como argumento el nombre del modelo al que apunta la relación
  • Pasa como segundo argumento el nombre de la tabla pivote pues no sigue las convenciones de Laravel y necesitas indicarlo
  • Tus tablas no siguen las convenciones por lo tanto debes de matar su nombre en cada modelo
  • Edita tu modelo de la tabla contactabilidades, es muy raro y no convencional el nombre que le das, (Checa el nombre que le daré mas abajo)
  • Cómo también tu llave primaria y foránea no siguen las convenciones revisa aquí sobre el tercer y cuarto parámetro

Código

protected $table = 'tuTabla';

EDICIÓN

  • El modelo users debe tener una relación del siguiente modo:

Código

class User extends Model
{
    public function contactabilidades()
    {
        return $this->belongsToMany(Contactabilidad::class, 'tbl_equipo_postventaatc', 'asesor_id');
    }
}
  • El modelo Contactabilidad deberá tener una estructura como la siguiente:

Código:

class Contactabilidad extends Model
{

    protected $table = 'tbl_lista_contactabilidad';

    public function users()
    {
        return $this->belongsToMany(User::class, 'tbl_equipo_postventaatc', 'asesor_id');
    }
}

Answered by BetaM on December 5, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP