Как запросить многие ко многим полиморфным отношениям с определенным типом класса? - PullRequest
0 голосов
/ 25 августа 2018

Я создал таблицы: addresses, contacts, events и addressables.

Здесь addressables (id, address_id, addressable_id, addressable_type) имеет много-много полиморфных отношений для адреса с contacts и events.

Я определил следующие модели:

Адрес:

class Address extends Model
{
    protected $fillable = [...];

    public function addressable()
    {
        $this->morphTo();
    }
}

Контакт:

class Contact extends Model
{
    protected $fillable = [...];

    public function addresses()
    {
        return $this->morphToMany(Address::class, 'addressable');
    }
}

Событие:

class Event extends Model
{
    protected $fillable = [...];

    public function addresses()
    {
        return $this->morphToMany(Address::class, 'addressable');
    }
}

Теперь я хотел получить все адреса по контакту или событию или любым другим определенным моделям.Можно ли получить адреса по определенному типу без определения следующих функций в модели Address?Любая помощь очень ценится.

public function contacts()
{
    return $this->morphedByMany('Contact', 'addressable');
}


public function events()
{
    return $this->morphedByMany('Event', 'addressable');
}

Если возможно, как я могу достичь решения?

Ожидаемое:

$contactAddress = Address::getAddressable('App\Contact');
$eventAddress = Address::getAddressable('App\Event');

1 Ответ

0 голосов
/ 26 августа 2018

Вы можете использовать отношения addresses:

$contactAddress = Contact::with('addresses')->get()->pluck('addresses')->flatten();

Как отдельный метод:

class Address extends Model
{
    public static function getAddressable($class)
    {
        return $class::with('addresses')->get()->pluck('addresses')->flatten();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...