laravel polymorphi c отношение пользовательский тип - PullRequest
0 голосов
/ 07 января 2020

У меня есть таблица изображений следующим образом:

Schema::create('images', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('path');
    $table->unsignedBigInteger('imageable_id')->nullable();
    $table->string('imageable_type')->nullable();
    $table->unsignedBigInteger('image_properties_id')->nullable();
    $table->unsignedBigInteger('parent_id')->nullable();
    $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
});

Я хочу иметь отношение polymorphi c к таблице изображений, и она прекрасно работает для большинства частей, однако проблема в том, что некоторые модели, такие как Post может иметь изображения для разных целей, например, сообщение может иметь изображение для обложки сообщения, а также изображения, используемые в содержимом сообщения. Можно ли получить доступ только к изображениям, принадлежащим обложке сообщения, а не к содержимому?

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

1 Ответ

1 голос
/ 07 января 2020

Вы можете использовать расширенные отношения для фильтрации по мере необходимости.

Предполагая, что у вас есть images отношения на модели Post, вы можете создать еще два, как указано ниже (по одному для контента и обложки)

public function coverImages() {
    return $this->images()->where('imageable_type', 'post/cover');
}

public function contentImages() {
    return $this->images()->where('imageable_type', 'post/content');
}

С этим определением отношений теперь вы можете использовать каждое из них как независимое красноречивое отношение.

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