Как объединить две таблицы с помощью сводной таблицы, используя Laravel? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть три таблицы:

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_Postventaat c (модель 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');

}

ПРИМЕР:

enter image description here

Как вы видите на изображении ... если я связываю usuarios_id непосредственно с пользователями я получу другое имя, и я не хочу этого ... Я хочу отношения, как на изображении

1 Ответ

1 голос
/ 13 марта 2020

Сводная таблица - это структура, используемая для объединения двух отдельных моделей в одно отношение. Это называется отношение «многие ко многим» в Eloquent.

Из того, что вы описали, здесь дело обстоит не так. Скорее, это выглядит как отношения has-many-through .

Если я правильно понимаю, ваши отношения должны выглядеть так:

<?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');
    }
}

Очевидно, это Это проще для носителей английского языка Engli sh, но я не могу не подчеркнуть, насколько это было бы проще, если бы вы следовали правилам Laravel в отношении именования ваших моделей, таблиц и столбцов. Почему столбец usuarios_id относится к таблице с именем tbl_equipo_postventaatc? Зачем использовать asesor_id вместо user_id? Names Эти имена не имеют ничего общего друг с другом и затрудняют понимание того, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...