在morphWith范围函数中绑定范围函数在Laravel中

问题描述

我正在尝试从多态关系绑定查询生成器中的作用域函数。这是我目前拥有的东西

class ParentModel extends Model {

    public function morphable() {
        return $this->morphTo()->withMorph([
            ChildOne::class => ['image'],ChildTwo::class => ['item.image']
        ])
    }

}

假定ChildTwobelongToChildOne关系,并且ChildOne有一个称为image的关系。 ChildOne模型具有我要包含在morphWith中的范围关系。 如果我这样做

return $this->morphTo()->withMorph([
    ChildOne::class => ['image'],ChildTwo::class => [
        'item' => function($query) {
            $query->someScopeFunction()->with('image');
        }
    ]
])

有效。但我也想将其包括在ChildOne(第一个多态关系)中。我尝试了几件事:

  1. ChildOne中的全局作用域将其包括在内,但这影响了我应用程序的其他部分,因此我不想在任何地方都处理(没有GlobalScope等)
  2. 我尝试过
    ChildOne::class => function($query) {
        $query->someScopeFunction()->with('image');
    }
    
    但这也不起作用。它给了我这个错误"morphTo" mb_strpos() expects parameter 1 to be string,object given。我试图用[]包装闭包,但仍然没有用。
  3. 我尝试通过执行此操作在查询生成器中进行处理
    ParentClass::whereHasMorph('morphable',[ChildOne::class,ChildTwo::class],function($query,$type) {
        if( $type === ChildOne::class ) {
            $query->someScopeFunction()->with('image');
        } else {
            $query->with(['item' => function($query) {
                $query->someScopeFunction()->with('image');
            }
        }
    })->get();
    
    这也不起作用。我检查了是否调用了范围函数,确实如此,但是没有反映出它所做的更改。

有人知道如何实现这一目标吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)