Laravel полиморфные отношения с опорой - PullRequest
2 голосов
/ 29 марта 2019

Предположим, у меня есть записи и видео, которые могут просматривать несколько пользователей.

- users
  - id

- posts
  - id

- videos
  - id

- user_accessables (pivot)
  - id
  - user_id
  - accessable_id
  - accessable_type

В этом примере я настроил свои отношения с пользователем так, но что-то не так

class User extends Model {
    public function posts() {
         return $this->morphedByMany(
                       Post::class,
                       'accessable',
                       'user_accessables'
         );
    }

    public function videos() {
         return $this->morphedByMany(
                       Video::class,
                       'accessable',
                       'user_accessables'
         );
    }


   public function allowedEntities() {
       return ($this->posts)->merge($this->videos);
   }
}

С помощью allowedEntities() я могу объединить обе модели.

Тем не менее, я думаю, что использование полиморфных отношений возвращает коллекцию сущностей через отношения, а не требует отношения комбинатора, верно?

У меня проблемы с пониманием полиморфности с помощью сводной таблицы (пример тега в документации не похож на тот же сценарий).

Потому что теперь я не могу сделать:

$collection = collect(); // multiple models of Video & Post
$user->allowedEntities()->sync($collection);

1 Ответ

0 голосов
/ 30 марта 2019

Как сказал @Jonas Staudenmeir, невозможно иметь отношение, которое возвращает всю связанную модель, НО вы можете определить метод в модели, который возвращает объект построителя запросов со всеми необходимыми объектами (поиск в документации).

...