Laravel:如何在没有目标的情况下编写查询

时间:2018-02-19 20:33:52

标签: php laravel laravel-5 eloquent

是否可以先创建查询然后将其分配给选择?

例如

$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;

我正在尝试将查询封装在函数中,然后将它们执行到任何模型或表

2 个答案:

答案 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();