Laravel hasManyThrough polymorphi c таблица не работает - PullRequest
0 голосов
/ 09 мая 2020

У меня следующие отношения:

class Project extends Model
{
   public function invitors()
   {
      return $this->hasMany(Invitation::class)
   }
}

// User model
class User extends Model
{
    public function invitations()
    {
        return $this->morphMany('App\Invitation', 'invitee');
    }
}

// Business Model
class Business extends Model
{
    public function invitations()
    {
        return $this->morphMany('App\Invitation', 'invitee');
    }
}

// Invitation model
class Invitation extends Model
{
    public function invitee()
    {
        return $this->morphTo();
    }

    public function project()
    {
       return $this->belongsTo(Project::class);
    }
}

Я хочу получить приглашения на проекты (пользователей и компании). Когда я использую from $project->invitors->invitee, он не работает.

1 Ответ

0 голосов
/ 09 мая 2020

В вашем примере $project->invitors - это набор Invitation экземпляров, и у него нет свойства invitee. Вы можете использовать помощника pluck для l oop $project->invitors и получить их приглашенных:

$invitees = $project->invitors->pluck('invitee');

В качестве ответа на первый комментарий: чтобы получить определенные c атрибуты извлеченных связанных моделей (" приглашенный ") вы можете указать аксессоры:

class Business extends Model
{
    ...

    public function getInviteeNameAttribute() {
        return $this->name;
    }
}

class User extends Model
{
    ...

    public function getInviteeNameAttribute() {
        return $this->first_name . ' ' . $this->last_name;
    }
}

... затем получить этот атрибут из invitee:

$invitees[0]->invitee_name

См. https://laravel.com/docs/7.x/eloquent-mutators#defining -an-accessor

...