Как соотнести три модели в laravel? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь связать три модели в 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 Попытка получить свойство 'name' не-объекта"

Что мне делать?

1 Ответ

0 голосов
/ 11 марта 2020

пожалуйста, посмотрите на красноречивые отношения HasManyThrough

Вы должны написать tblListaContactabilidad() метод в Tbl_Equipo_Postventaat c Класс, который будет возвращать 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 -много-через

...