程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> D()方法的尋找順序,方法尋找順序

D()方法的尋找順序,方法尋找順序

編輯:關於PHP編程

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’)方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved