ThinkPhp框架中使用mongodb数据库配置报错Call to a member function selectCollection() on a non-object

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPhp框架中使用mongodb数据库配置报错Call to a member function selectCollection() on a non-object相关的知识,希望对你有一定的参考价值。

TP3.1的解决方法就是如楼上所说,需要实例化mong数据库的模型。

so 有两种方式:

    直接在使用的方法内实例化MongoModel类;

    写一个model专门继承MongoModel,把需要连mongo的操作或方法都丢里面去,然后在需要的页面中D()一下这个model中的某一方法即可. 

如下图代码:

参考技术A 我也遇到了同样问题、 你的问题最后是如何解决的?

问题已经解决,在lib/model下的indexmodel.class.php文件里继承的Model改为MongoModel:
class IndexModel extends Model ... 改成 class IndexModel extends MongoModel ...
参考技术B 没有实例化对象:
我出现这个错误的解决方案是,在实例化对象时用 $mongo = new mongoModel('Test');
而用ThinkPHP内置的D和M实例化不了
参考技术C 父类Controller里边是有一个构造函数的,我只知道你这样定义你的构造函数肯定会报错,不过具体是不是这个错误我忘记了,解决办法是:在你的构造函数的function的第一行加入代码parent::__construct();//执行父类的构造函数,否则会被覆盖的。

thinkphp框架 链接数据库和操作数据

框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下。

一、链接数据库

(1)找到模块文件夹中的Conf文件夹,然后进行编写config.php文件

(2)打开这个config.php文件,然后找到父类配置文件convention.php文件,将关于"数据库"的部分复制粘贴到config.php配置文件中

 

/* 数据库设置 */

   ‘DB_TYPE‘               =>  ‘‘,     // 数据库类型
   ‘DB_HOST‘               =>  ‘‘// 服务器地址
   ‘DB_NAME‘               =>  ‘‘,          // 数据库名
   ‘DB_USER‘               =>  ‘‘,      // 用户名
   ‘DB_PWD‘                =>  ‘‘,          // 密码
   ‘DB_PORT‘               =>  ‘‘,        // 端口
   ‘DB_PREFIX‘             =>  ‘‘,    // 数据库表前缀
   ‘DB_FIELDS_CACHE‘       =>  true,        // 启用字段缓存(开发时这个要写成false)
 
 
 

连接成功后,然后就是新建模型文件了

二、新建模型文件(具体内容看ThinkPhp框架知识)

(1)找到模块文件夹中的Model文件夹,然后在这个文件夹新建模型文件

a)         model本身就是一个类文件

b)        数据库中的每个数据表都对应一个model模型文件

c)         最简单的数据model模型类

自己的模型文件

 

<?php

namespace Home\Model;   //命名空间的写法
use Think\Model;          //使用模型
class InfoModel extends Model
{
     
}
 

打开控制文件,然后写个方法,这里叫做ceshi()

public function ceshi()

{
  $info new \Home\Model\InfoModel();  //造新对象,这里是Info模型
  var_dump($info);  //输出一下,看下结果
         
}
 

三、对数据库进行操作(下面的是ThinkPHP模型基础类提供的“连贯操作方法”连贯操作方法)

可以利用这个控制文件中的方法,就直接在这个方法中写了

 

public function ceshi()
{
  $info new \Home\Model\InfoModel();  //造新对象,这里是Info模型
  //下面是数据库操作
         
}
 

(1)查询表中的所有数据(方法:select())

返回的二维数组(关联的)
返回的数据其中的字段名称是小写,这样做数据库时尽量是小写的

 

$arr $info->select();
var_dump($arr);
 
1.查询一条数据(方法:find())
 
2.select()方法也是可以查询一条或是多条数据
 
3.条件查询数据(方法:where())
 
4.切换数据表(方法:table())
 
5.选择操作的字段(方法:field())
 
6.对数据进行排序(方法:order())
 
7.分页查询数据(方法:limit()和page())
 
8.对数据进行分组(方法:table())
 
9.链接查询数据库(方法:join())
 
10.去重(distinct())

三、对数据库进行操作(下面的是ThinkPHP模型基础类提供的“连贯操作方法”连贯操作方法)

可以利用这个控制文件中的方法,就直接在这个方法中写了

1
2
3
4
5
6
public function ceshi()
{
  $info new \Home\Model\InfoModel();  //造新对象,这里是Info模型
  //下面是数据库操作
         
}

以上是关于ThinkPhp框架中使用mongodb数据库配置报错Call to a member function selectCollection() on a non-object的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP6使用mongodb报错Authentication failed.

教你THINKPHP6.0 快速安装使用MongoDB

ThinkPHP框架之模型

ThinkPHP框架 _ 学习9

教你THINKPHP6.0 快速安装使用MongoDB

教你THINKPHP6.0 快速安装使用MongoDB