在我的 Laravel 5.5 应用程序中,many to many polymorphic relation
用于指出destinations
和photos
之间的关系。数据透视表中有一个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
表数据:
从此数据库表数据中,
id = 1的照片应该与id = 1的目的地一起获得[只有优先级为1的照片]
id = 2的照片应该与Destination = 2的目的地一起获得[优先级为2的记录]