我有一个多态图像模型(public $morphTo = ['imageable' => []];
)和一个使用它的Post模型。
我希望帖子有2 o 3张图片用于不同的目的(帖子标题,特色图片和背景图片)
由于处理图像的图像模型的复杂性及其在其他几个类(文章,页面等)上的使用,我非常希望在像这样的帖子上使用它,但每种类型的一个图像,这就是我使用的原因morphOne
。在Post
模型:
public $morphOne = [
'header_image' => [
Image::class,
'name' => 'imageable'
],
'featured_image' => [
Image::class,
'name' => 'imageable'
],
'background_image' => [
Image::class,
'name' => 'imageable'
],
];
但恢复图像似乎总是检索图像表中的第一个,即使两个都保存在那里。保存任何替换第一条记录,删除删除第一条记录等...
我可以猜到这个问题,可能是为MorphOne关系检索一条记录,第一条匹配{image}属性的type
和id
。
问题是:有没有办法让这个结构有效?关系上的参数,可能是不同的变形关系?
感谢您的帮助!
答案 0 :(得分:1)
我找到了一种使用多个morphOne关系的方法。
您只需要为关系添加一个或多个条件,并使用一列来过滤数据:
public function scopeHeaderImage($query) {
$query->where('image_type', "header_image");
}
public function scopeFeaturedImage($query) {
$query->where('image_type', "featured_image");
}
关于关系:
public $morphOne = [
'header_image' => [
\NewCriterion\Content\Models\Image::class,
'name' => 'imageable',
'scope' => 'headerImage'
],
'featured_image' => [
\NewCriterion\Content\Models\Image::class,
'name' => 'imageable',
'conditions' => "image_type = 'featured_image'"
]
];
两种方式都有效,作为范围(使用模型方法在顶部或直接使用原始条件)
请注意,要使其正常工作,您必须将此信息保存在数据库中。我,在$model->beforeFilter()
:
$model->header_image->image_type = "header_image";
$model->featured_image->image_type = "featured_image";