D()方法的寻找顺序

使用 D()方法比直接使用模型类更加的智能,如果在HomeModelUserModel 找不到该模型类, 那么就会去公共模块下找CommonModelUserModel 去找。 如果还找不到,就会直接实例化基类 Model()类,也就是等同于使用 M()方法。

需要注意的是:D(‘User’)方法中的表名需要首字母大写,因为查找跳到公共模块里时无法识别小写的user,除非你显式的写成:D(‘Common/user’),这样完整的写法用小写user也行,否则若你直接用 D(‘user’) 的话,它会跳过公共模块直接去实例化基类Model()。因此建议养成表的首字母大字的习惯,以防出错。

当然,上述问题主要是由于用小写的user时:

D(‘user‘)方法在 Home 模块里可以识别,直接实例化也没问题,唯有跨模块(比如Common)仿问时才会发生。当然,M(‘user‘)方法用小写也可以识别。

另外,如果使用索引数组作为查询条件也要注意:

D(‘User‘)方法查找到的模型如果有手工定义数据字段的话,那么查询将无法生效。意思是这样滴:

namespace HomeModel;

use ThinkModel;

class UserModel extends Model{

protected $fields=array(  // 这是手工定义字段

  ‘id‘,

  ‘user‘,

  ‘_pk‘=>‘id‘,

  ‘type‘=>array(

    ‘id‘=>‘smallint‘,

    ‘user‘=>‘varchar‘

      )

    );

// ...

  }

此时在控制器下使用如下代码时:

$user=D(‘User‘);

$c[‘id‘]=2;

$c[‘user‘]=‘樱桃小丸子‘;

print_r($user->where($c)->select()); // 使用索引数组查询

将不会查询到结果,除非注释掉手工字段,或者使用M(‘User’)方法。

时间: 2024-11-09 09:06:19

D()方法的寻找顺序的相关文章

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"

Junit4学习笔记--方法的执行顺序

package com.lt.Demo.TestDemo; import java.util.Arrays; import java.util.Collection; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; im

BitConverter.GetBytes 方法以什么顺序返回字节数组

测试程序 那么,我们写个程序来测试一下吧.下面就是 BitConverterTester.cs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 using System; namespace Skyiv.Tester {   static class BitConverterTester   {     static void Main()     {       Console.WriteLine("      OS Version: " 

iOS APP启动时所有方法的调用顺序分析

一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问题.本文不怕麻烦的在几乎所有启动时要调用的方法里都用了 __FUNCTION__ 打印.结果还有有些地方出人意料的 首先回顾一下应用程序的启动过程 ①.先加载Main函数 ②.在Main函数里的 UIApplicationMain方法中,创建Application对象 创建Application的D

静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序

静态代码块: 是在当类被载入(内存)时,(最先被调用的),静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化.执行类的载入之前就会调用. 非静态代码块: 是在当类的对象被创建载入(内存)时,(最先被调用的),每创建一个对象,即每载入一个对象,非静态代码块都执行一次.执行类对象的载入之前就会调用. 对象载入之前,一定要是类先被载入. 静态方法.非静态方法:都是调用时,才执行的.静态方法属于类的,加载完类就可以调用静态方法:非静态方法是属于对象的,加载完对象就可以调用非静态方法. 加载

js和jquery页面初始化加载函数的方法及先后顺序

原文:js和jquery页面初始化加载函数的方法及先后顺序 运行下面代码.弹出A.B.C.D.E的顺序:A=B=C>D=E. jquery:等待页面加载完数据,以及页面部分元素(不包括图片.视频), js:是页面全部加载完成才执行初始化加载. <!DOCTYPE html> <html> <head> <title>首页</title> <script type="text/javascript" src=&quo

对应用程序启动时所有方法的调用顺序分析

一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问题.本文不怕麻烦的在几乎所有启动时要调用的方法里都用了 __FUNCTION__ 打印.结果还有有些地方出人意料的 如果你不是在董铂然博客园看到本文,请点击查看原文 首先回顾一下应用程序的启动过程 ①.先加载Main函数 ②.在Main函数里的 UIApplicationMain方法中,创建Appl

在Spring Bean的生命周期中各方法的执行顺序

Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下十种: 通过实现 InitializingBean 接口来定制初始化之后的操作方法: 通过实现DisposableBean 接口来定制销毁之前的操作方法: 通过元素的 init-method属性指定初始化之后调用的操作方法: 通过元素的 destroy-method属性指定销毁之前调用的操作方法: 在指定方法上加上 @PostConstruct

控制器一些方法的执行顺序的测试

执行顺序如下: 2015-11-18 10:37:40.877 Test-All[6252:69490] viewWillAppear:2015-11-18 10:37:40.882 Test-All[6252:69490] viewWillLayoutSubviews(默认会执行一次)2015-11-18 10:37:40.882 Test-All[6252:69490] viewDidLayoutSubviews(默认会执行一次)2015-11-18 10:37:40.883 Test-Al