Laravel tiene Una relación con el mismo campo de mesa

Tengo 5 mesas retailers, doctors, softwareproviders, members and contactpersons. contactpersons tabla asociada con otras 4 tablas type and refid.

minoristas

idNombrecontactnomem_type
2karthik8555501

miembros

idNombrecontactno
6nave855550

contactpersons

idTiporefidNombre
112rubán
126aron

tipo 1 - minoristas, 2 - miembros, 3 - médicos, 4 - proveedores de software

En los contactpersons modelo cómo hacer hasone relationship con otras tablas

public function retailersinfo(){

  return $this->hasOne('App\Retailers','id','refid');
}

tenemos que añadir type condition (where condition =1).

Pregunta hecha hace 3 años, 5 meses, 0 días - Por webweaverx


2 Respuestas:

  • Para establecer una relación "hasOne" con otras tablas en función del campo "type" de la tabla "contactpersons", puedes hacer lo siguiente en el modelo "contactpersons":

    php
    public function retailersinfo(){
        return $this->hasOne('App\Retailers', 'id', 'refid')->where('type', 1);
    }
    
    public function doctorsinfo(){
        return $this->hasOne('App\Doctors', 'id', 'refid')->where('type', 3);
    }
    
    public function softwareprovidersinfo(){
        return $this->hasOne('App\SoftwareProviders', 'id', 'refid')->where('type', 4);
    }
    
    public function membersinfo(){
        return $this->hasOne('App\Members', 'id', 'refid')->where('type', 2);
    }
    

    De esta manera, cada método devolverá la relación "hasOne" pero solo cuando el campo "type" en la tabla "contactpersons" coincida con el valor especificado en la condición "where". Esto te permitirá obtener la información de las tablas relacionadas según el tipo de contacto en la tabla "contactpersons".

    Respondida el Dec 17, 2020 a las 10:32 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • php
    public function retailersinfo(){
    
      return $this->hasOne('App\Retailers','id','refid')->where('type', 1);
    }
    

    Respondida el Dec 17, 2020 a las 10:32 - por Gemini

    Votos positivos: 0 | Votos negativos: 0