php - 如何在 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!
解决方案
我已经回答了我自己的问题。因为,我不想更复杂地编辑我的问题。我想谈谈这个问题的解决方案。
我在 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);
}
}
推荐阅读
- selenium - Nightwatch 没有获取 sendkeys 值
- xml - 使用 XSLT 提取和更新 XML
- android - 在基于 MVVM 的应用程序中添加 Room Database 类会产生绑定问题
- ruby-on-rails - 如何在 Active Storage 中仅存储 .yml 文件
- java - 变量是从内部类中访问的,需要声明为final
- sql - Oracle Apex:根据条件在报告中创建红绿灯
- groovy - 无法从规范文件中的 GebConfig.groovy 文件中读取系统变量集
- javascript - html5 画布导航栏的对象数组
- python - Python多处理程序可能出现死锁?
- python - 移动文本时对列表进行额外迭代