账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    laravel中使用单例模式封装DB门面,在第二次查询数据的时候返回为空
    59
    0

    1.使用DB门面操作数据库,因为项目中每个应用都会单独建立一个数据库,所以使用单例模式封装了一个类, 实例化这个类就可以操作对应数据库中的数据表。
    但是出现的问题就是,第一次查数据的时候能查出来,第二次就无法查出数据了,需要重新实例化这个类
    例如 :

                        //将这个单例类中的Instance置为null
                        $this->objModel->nullInstance();
                        //重新实例化类
                        $dbName = “xxxx11”;
                        $this->objFileModel = FileModel::init($dbName);

    2.`

    class FileModel
    {

    private $TableObj = null;
    private $DbObj = null;
    public static $instance = null;
    /**
     * 初始化数据表链接对象
     * ImgModel constructor.
     * @param null $dbName
     */
    private function __construct($dbName = null)
    {
    
        try {
            if (null == $this->TableObj) {
                $dbInfo = array(
                    'driver' => 'mysql',
    
                    'read' => [
                        'host' => env('DB_READ_HOST', 'localhost')
                    ],
                    'write' => [
                        'host' => env('DB_WRITE_HOST', 'localhost')
                    ],
    
                    'port' => env('DB_PORT'),
                    'database' => $dbName,
                    'username' => env('DB_USERNAME'),
                    'password' => env('DB_PASSWORD'),
                    'charset' => 'utf8',
                    'collation' => 'utf8_unicode_ci',
                    'prefix' => '',
                    'strict' => true,
                    'engine' => null,
                );
                Config::set("database.connections.cs_mysql", $dbInfo);
                $this->DbObj = DB::connection('cs_mysql');
                $this->TableObj = $this->DbObj->table("file");
    
            }
        }catch (\Exception $e) {
        }
    }
    
    /**
     * @param null $dbName
     * @return FileModel|null
     */
    public static function init($dbName = null) {
        if (null == self::$instance || !isset(self::$instance)) {
            self::$instance = new self($dbName);
        }
        return self::$instance;
    }
    
    public function getA($name) {
      return $this->TableObj->where("name", $name)->get();
    }
    
    public function getB($name) {
      return $this->TableObj->where("name", $name)->get();
    }
    
    
    public function getA() {
      return $this->TableObj->where("uid", $uid)->where("is_commit", $is_commit)->get();
    }
    
    
    public function nullInstance() {
        self::$instance = null;
    }
    

    }
    `

    $dbName = “xxx”;
    $this->objModel = FileModel::init($dbName);

    $dataA = $this->objModel->getA("ssss"); //这次可以获取数据

    $dataB = $this->objModel->getB("ssss"); //这次获取的数据就是空

    但是如果我在调用getB之前重新实例化FileModel这个类就ok了

    $dbName = “xxx”;
    $this->objModel = FileModel::init($dbName);

    $dataA = $this->objModel->getA("ssss"); //这次可以获取数据

    
    
     $this->objModel->nullInstance();
     $dbName = “xxx”;
     $this->objModel = FileModel::init($dbName);
     
     $dataB = $this->objModel->getB("ssss");  //这次就可以获取到数据了
     
     
     
     
     
     **请问大神为什么会出现这种问题呢,怎么才能更好的解决这个问题?**
     
     
     
     
     
     
     
     
     
     
     
     
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 半离 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部