目前我使用以下助手:
function whereHasNested($query, $key, $relationship)
{
if(Input::has($key))
{
$callback = function($q) use (&$relationship, &$key, &$callback) {
if(!$relationship) $q->whereId(Input::get($key));
else $q->whereHas(array_shift($relationship),$callback);
};
$callback($query);
}
}
这样可以避免在 whereHas 中写入多个 whereHas 。这是一个用法示例:
$query = Model::query();
whereHasNested($query, 'package_id', ['club', 'membership', 'package']);
return $query->orderBy('update_at', 'DESC')->paginate(10);
但是,如何将其转换为 BaseModel 中的方法?
所以我可以把它链接起来:
$query->whereHasNested($key, $relationship);
答案 0 :(得分:0)
Query Scopes的用途是什么:
public function scopeWhereHasNested($query, $key, $relationships)
{
// your code here...
}
// then use it wherever you want
Model::whereHasNested($key, $relationships);