Laravel多对多多态关系:在每个记录中让孩子具有更高的优先级

时间:2018-07-16 17:00:36

标签: laravel laravel-5 eloquent many-to-many laravel-5.5

在我的 Laravel 5.5 应用程序中,many to many polymorphic relation用于指出destinationsphotos之间的关系。数据透视表中有一个priority列,用于存储每个关系的优先级。

我需要的是,访问所有destination记录,其中一个相关的photo具有更高的优先级

我能够使用所有相关照片访问所有目的地。但是,当我尝试将相关项目的选择范围缩小到优先级更高的“一个”时,它是行不通的。

destinations表的迁移:

Schema::create('destinations', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name', 100)->unique();
    $table->string('tag_line', 200);
});

photos表的迁移:

Schema::create('photos', function (Blueprint $table) {
    $table->increments('id');
    $table->string('image_name', 100)->unique();
});

publishables表的迁移:

Schema::create('publishables', function (Blueprint $table) {
    $table->unsignedInteger('photo_id');
    // publishable_id and publishable_type
    $table->morphs('publishable');
    $table->tinyInteger('priority');
});

目标模型:

class Destination extends Model
{
    /**
     * Get all of the images for the destination.
     */
    public function photos()
    {
        return $this->morphToMany('App\Models\Photo', 'publishable')->as('destinationPhotoDetail')->withPivot('priority');
    }
}

照片型号:

class Photo extends Model
{
    /**
     * Get all of the destinations that are assigned this photo.
     */
    public function destinations()
    {
        return $this->morphedByMany('App\Models\Destination', 'publishable');
    }
}

我尝试过的方法

$destinations = Destination::with(['photos']);

输出:给出所有相关的photos

$destinations = Destination::with(['photos' => function ($query) {
                    $query->orderBy('priority', 'desc')->first();
                }]);

输出:仅给一个目的地提供一张优先级更高的照片。

publishables 表数据

enter image description here

从此数据库表数据中,

id = 1的照片应该与id = 1的目的地一起获得[只有优先级为1的照片]

id = 2的照片应该与Destination = 2的目的地一起获得[优先级为2的记录]

0 个答案:

没有答案