是否可以先创建查询然后将其分配给选择?
例如
$queryWithoutTarget = new Builder();
$queryWithoutTarget->where('x','y')->whereNull('z');
$workersQuery = Worker::select();
// I know this is Totally wrong, because queryWithoutTarget is not a parameter of $workersQuery
$workersQuery = $workersQuery->queryWithoutTarget;
我正在尝试将查询封装在函数中,然后将它们执行到任何模型或表
答案 0 :(得分:0)
不,首先使用$queryWithoutTarget
作为变量(在第一行和第三行),然后将其用作函数(在第8行({...}->queryWithoutTarget
)
编辑:如果您覆盖Builder
类,那么可能就可以了。开放可能有无限可能。但是你可以在控制器中进行覆盖而不是额外的行
答案 1 :(得分:0)
使用范围。范围只是一种可以添加到模型中的便捷方法,它封装了用于执行查询的语法
创建范围特征
namespace App\Models\Worker\Traits;
/**
* Class WorkerScope.
*/
trait WorkerScope
{
/**
* @param $query
*
* @return mixed
*/
public function scopeActive($query)
{
return $query->where('x','y')->whereNull('z');
}
}
在模型上实施范围
use App\Models\Worker\Traits\WorkerScope;
/**
* Class Worker.
*/
class Worker extends Model
{
use WorkerScope;
...
}
定义范围后,您可以像
一样执行它$workersQuery = Worker::active()->get();