Php OctoberCMS多吗啉酮关系

Php OctoberCMS多吗啉酮关系,php,laravel-5,octobercms,Php,Laravel 5,Octobercms,我有一个多态图像模型(public$morphTo=['imageable'=>[]];)和一个使用它的Post模型 我希望这篇文章有2到3个不同用途的图片(文章标题、特色图片和背景图片) 由于图像模型处理图像的复杂性及其在其他几个类(文章、页面等)上的使用,我非常希望在这样的帖子上使用它,但每种类型都有一个图像,这就是为什么我使用morphOne。在PostModel上这样做: public $morphOne = [ 'header_image' => [ Im

我有一个多态图像模型(
public$morphTo=['imageable'=>[]];
)和一个使用它的Post模型

我希望这篇文章有2到3个不同用途的图片(文章标题、特色图片和背景图片)

由于图像模型处理图像的复杂性及其在其他几个类(文章、页面等)上的使用,我非常希望在这样的帖子上使用它,但每种类型都有一个图像,这就是为什么我使用
morphOne
。在
Post
Model上这样做:

public $morphOne = [
    'header_image' => [
        Image::class,
        'name' => 'imageable'
    ],
    'featured_image' => [
        Image::class,
        'name' => 'imageable'
    ],
    'background_image' => [
        Image::class,
        'name' => 'imageable'
    ],
];
但是恢复映像似乎总是检索映像表中的第一个映像,即使这两个映像都保存在那里。保存任何替换第一条记录,删除删除第一条记录,等等

我可以猜到问题所在,检索MorphOne关系的一条记录可能会得到第一条与imageable属性的
type
id
匹配的记录

问题是:有没有办法让这一结构发挥作用?关系上的参数,可能是不同的变形关系


谢谢你的帮助

我找到了一种使用多种吗啉酮关系的方法

您只需向关系中添加一个范围或条件,并添加一列以过滤数据:

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方法或直接使用原始where条件)

请注意,要使其正常工作,必须将此信息保存在数据库中。一、 对于在
$model->beforeFilter()
中实现的一个:


从未尝试过octobercms(目前-但几乎没有laravel背景),我想知道如果你给它起了不同的名字,
“name”=>“imageable”
,会发生什么。编辑图像表,或者可能为图像表提供额外的列(如果可能的话),就像。在10月份使用关系条件实现了几乎相同的解决方案。请看下面我的答案!我明白了,这是一种操纵多态关系的有趣方式。
$model->header_image->image_type = "header_image";
$model->featured_image->image_type = "featured_image";