问题描述
我正在尝试从多态关系绑定查询生成器中的作用域函数。这是我目前拥有的东西
class ParentModel extends Model {
public function morphable() {
return $this->morphTo()->withMorph([
ChildOne::class => ['image'],ChildTwo::class => ['item.image']
])
}
}
假定ChildTwo
与belongTo
有ChildOne
关系,并且ChildOne
有一个称为image
的关系。
ChildOne
模型具有我要包含在morphWith
中的范围关系。
如果我这样做
return $this->morphTo()->withMorph([
ChildOne::class => ['image'],ChildTwo::class => [
'item' => function($query) {
$query->someScopeFunction()->with('image');
}
]
])
有效。但我也想将其包括在ChildOne
(第一个多态关系)中。我尝试了几件事:
-
ChildOne
中的全局作用域将其包括在内,但这影响了我应用程序的其他部分,因此我不想在任何地方都处理(没有GlobalScope等) - 我尝试过
但这也不起作用。它给了我这个错误ChildOne::class => function($query) { $query->someScopeFunction()->with('image'); }
"morphTo" mb_strpos() expects parameter 1 to be string,object given
。我试图用[]包装闭包,但仍然没有用。 - 我尝试通过执行此操作在查询生成器中进行处理
这也不起作用。我检查了是否调用了范围函数,确实如此,但是没有反映出它所做的更改。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 (将#修改为@)