首页 > 解决方案 > 如何在 Laravel Query Builder 中使用全局作用域?(没有雄辩的模型)

问题描述

我正在使用太多的 mysql 大视图。我不想为视图使用 Eloquent 模型。

我创建了“ViewBalance 扩展了 Illuminate\Support\Facades\DB”。一切都如我所愿。

但我需要为公司范围设置init()方法。

如何在没有init()方法的情况下使用全局范围?

视图模型

<?php

namespace App\Models\Views;

use App\Facades\CoreService;
use Illuminate\Support\Facades\DB;

class ViewBalance extends DB
{
     const COMPANY_COLUMN = 'company_id';
     const TABLE = 'view_balances';

     public static function init()
     {
         return parent::table(self::COMPANY_COLUMN)
             ->where(self::COMPANY_COLUMN, CoreService::companyId());
     }
}

在控制器中

<?php

$data = ViewBalance::init()->get(); // Worked!

标签: phplaravel

解决方案


我已经回答了我自己的问题。因为,我不想更复杂地编辑我的问题。我想谈谈这个问题的解决方案。

我在 Laravel 模型中添加了$table_view变量和getView()方法。如果你愿意,你可以为干净的代码创建特征。

它可以很容易地访问视图。它也是主要模型的一部分。

例如;

Laravel 基本账户模型

class Account extends Model {

    protected $table = 'accounts';

    protected $table_view = 'view_accounts';

    public function getView()
    {
        return \DB::table($this->table_view)->where('global_scope', 1);
    }

}

Laravel 帐户控制器

class AccountController extends Controller {

    public function index()
    {
        $items = (new Account)->getView()->paginate(20);
    }

}


推荐阅读