laravel orm 切库问题

家人们,咋就是说写的全局查询作用域为啥不生效呢

我是一个独立库没有商家id,一个sass库有商户id,这两个库的表和数据结构完全一直 我要做sass和平台的区分,所以只要切个库,加个where商户id条件限制就好了,我是这么写的

<?php

namespace App\Models;

use App\SassScope;

class Model extends \Illuminate\Database\Eloquent\Model
{
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(new SassScope());
    }
}
<?php

namespace App\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class SassScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        if (request()->has('merchant_id') && ! app()->runningInConsole()) {
            $model->setConnection('sass');
            $builder->where('merchant_id', app('request')->input('merchant_id'));
        }
    }
}
<?php

namespace OfferEasy\Website\WWW\Models;

//use Illuminate\Database\Eloquent\Model;

/**
 * Class Course 地区
 * @package OfferEasy\Website\WWW\Models
 */
class Area extends Model
{
    protected $connection = 'www';
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11
陈先生

放到 booted 而不是 boot 函数里面看下。

1个月前 评论
晏南风 (楼主) 1个月前

這個感覺只能一步步去調試了 dd一下 先看是否有執行apply方法 沒有再往上找 我一般都是在源碼包裡面一步步dd

我的感覺也和你的類似 但是我的是在同一個數據庫下面有多個庫 所以我只有1個連接配置 然後在中間件裡面切換庫 但是感覺這種會麻煩一些 隊列 腳本 定時任務這些都需要做特殊處理 主要是我的定時任務還是基於數據庫操作的

file

file

file

1个月前 评论
晏南风 (楼主) 1个月前
cccdz (作者) 1个月前
晏南风 (楼主) 1个月前
cccdz (作者) 1个月前
<?php

namespace App\Models;

use App\SassScope;

class Model extends \Illuminate\Database\Eloquent\Model
{
    public function __construct()
    {
        parent::__construct();

        if (request()->has('uniacid')) {
            $this->setConnection('sass');
        }
    }

    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(new SassScope());
    }
}

是因为切库太迟了,要在构造处就得切

1个月前 评论

做saas的,你直接用github.com/archtechx/tenancy 这个库

1个月前 评论
晏南风 (楼主) 1个月前
sanders 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!