小编Lê *_*ung的帖子

如何自定义Laravel的Database\Query\Builder(制作更好的子查询)

我正在研究Laravel 4.据我所知,我可以做子查询:

Project::whereIn('project_id', function($q) {
    $q->select('project_id')
        ->from('company')
        ->whereNull('deleted_at');
});
Run Code Online (Sandbox Code Playgroud)

我发现了并发症,我无法在子查询中使用范围并禁用soft_delete让我更改源代码.

我希望它是:

Project::whereIn('project_id', function(&$q) {
    $q = Company::select('project_id')->getQuery();
});
Run Code Online (Sandbox Code Playgroud)

现在,我可以添加范围,轻松禁用soft_delete.

我试过,并找到了一个解决方案,我必须更改Laravel的Database\Query\Builder代码,函数whereInSub,第786行.

call_user_func($callback, $query = $this->newQuery());
Run Code Online (Sandbox Code Playgroud)

至:

$query = $this->newQuery();
call_user_func_array($callback, array(&$query));
Run Code Online (Sandbox Code Playgroud)

修改Laravel框架的供应商是有害的.所以我想问一下如何安全地做到这一点.

抱歉,因为我的英语不好.

谢谢你的阅读.

php subquery laravel eloquent

9
推荐指数
2
解决办法
6237
查看次数

标签 统计

eloquent ×1

laravel ×1

php ×1

subquery ×1