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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 11

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

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

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

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

file

file

file

4个月前 评论
晏南风 (楼主) 4个月前
cccdz (作者) 4个月前
晏南风 (楼主) 4个月前
cccdz (作者) 4个月前
<?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());
    }
}

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

4个月前 评论

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

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

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