最優(yōu)良人 » fleaphp http://www.dgkai.cn/blog 中山php|最優(yōu)網(wǎng)絡 Mon, 13 May 2013 04:56:43 +0000 en hourly 1 http://wordpress.org/?v=3.1.4 FleaPHP如何定義表關(guān)聯(lián)以及關(guān)聯(lián)的簡寫 http://www.dgkai.cn/blog/view-259.html http://www.dgkai.cn/blog/view-259.html#comments Tue, 06 Sep 2011 10:06:23 +0000 lin http://www.dgkai.cn/blog/?p=259

定義從屬關(guān)聯(lián)

1、外鍵放置在主表中;
2、保存時不會自動更新關(guān)聯(lián)表的記錄;
3、刪除時也不會更新關(guān)聯(lián)表的記錄。

示例:
多個文章都屬于某一個欄目。

格式一:

* class Articles
* {
* var $belongsTo = array(
* array(
* ’tableClass’ => ‘Columns’,
* ’foreignKey’ => ‘column_id’,
* ’mappingName’ => ‘column’
* ),
* );
* }

在上面的格式中,foreignKey 表示在當前表中用什么字段存儲對關(guān)聯(lián)表的主鍵引用。
mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。

格式二:

* class Articles
* {
* var $belongsTo = ‘Columns’;
* }

格式二是一種簡化寫法。foreignKey 字段名將和關(guān)聯(lián)表的主鍵字段名相同。

============================

$hasMany

定義一對多關(guān)聯(lián)

1、外鍵保存在關(guān)聯(lián)表中;
2、保存時自動更新關(guān)聯(lián)表的記錄;
3、刪除主表記錄時自動刪除關(guān)聯(lián)記錄。

示例:
每個用戶(user)有多張訂單 order。

格式一:

* class Users
* {
* var $hasMany = array(
* array(
* ’tableClass’ => ‘Orders’,
* ’foreignKey’ => ‘user_id’,
* ’mappingName’ => ‘orders’,
* ),
* );
* }

在一對多關(guān)系中,當前表并不包含對關(guān)聯(lián)表的主鍵引用。
而是在關(guān)聯(lián)表中保存對當前表的主鍵引用。
在上面的格式中,foreignKey 指示在關(guān)聯(lián)表中用什么字段存儲對當前表的主鍵引用。
mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。

格式二:

* class Users
* {
* var $hasMany = ‘Orders’;
* }

簡化寫法中,foreignKey 字段名將和當前表的主鍵字段名相同。

============================

$hasOne

定義一對一關(guān)聯(lián)
1、外鍵放置在關(guān)聯(lián)表中;
2、保存時如果有關(guān)聯(lián)對象,則自動創(chuàng)建或更新關(guān)聯(lián)表的記錄;
3、刪除主表記錄時自動刪除關(guān)聯(lián)記錄。

示例:
當前表為 users,用于存儲用戶賬戶。而每個用戶賬戶有且只有一個對應的個人信息(profile)記錄。

格式一:

* class Users
* {
* var $hasOne = array(
* array(
* ’tableClass’ => ‘Profiles’,
* ’foreignKey’ => ‘profile_id’,
* ’mappingName’ => ‘profile’,
* ),
* );
* }

在上面的格式中,foreignKey 表示在關(guān)聯(lián)表中用什么字段存儲對主表的主鍵引用。 mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。 如果不提供 mappingName 參數(shù),則假定使用 tableClass。

格式二:

* class Users
* {
* var $hasOne = ‘Profiles’;
* }

格式二是一種簡化寫法。foreignKey 字段名將和主表的主鍵字段名名相同。

============================

$manyToMany

定義多對多關(guān)聯(lián)

1、外鍵保存在中間表里面;
2、保存時自動更新中間表;
3、刪除主表記錄時自動刪除中間表的相關(guān)記錄。

示例:
每個成員(member)可以擁有多個角色(role),而每個角色也可以指定給多個成員。

格式一:

* class Members
* {
* var $manyToMany = array(
* array(
* ’tableClass’ => ‘Roles’,
* ’joinTable’ => ‘member_roles’,
* ’foreignKey’ => ‘member_id’,
* ’assocforeignKey’ => ‘role_id’,
* ’mappingName’ => ‘roles’,
* ),
* );
* }

在多對多關(guān)系中,當前表并不包含對關(guān)聯(lián)表的主鍵引用。
而是在一個中間表里面保存對當前表和關(guān)聯(lián)表的主鍵引用。
在上面的格式中,joinTable 表示中間表的名字。foreignKey 和
assocforeignKey 分別表示在中間表里面用什么字段存儲對主表和
關(guān)聯(lián)表主鍵字段的引用。

mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。

格式二:

* class Members
* {
* var $manyToMany = ‘Roles’;
* }

簡化寫法中,foreignKey 字段名將和當前表的主鍵字段名相同。
assocforeignKey字段名稱則和關(guān)聯(lián)數(shù)據(jù)表的主鍵字段名相同。
而中間表名稱將用FLEA_Db_TableDataGateway::getMidtableName() 方法計算。

hasOne 是一對多關(guān)聯(lián),表示一條主表記錄有一條對應的關(guān)聯(lián)記錄。
而 belongsTo 是從屬關(guān)聯(lián),表示一條主表記錄屬于另一條關(guān)聯(lián)記錄。

hasOne 和 belongsTo 正好是相反的關(guān)系。

例如 “一個用戶”有一個“個人空間”。那么一個“個人空間”就屬于“一個用戶”。

由于 hasOne 實際上是 hasMany (一對多)關(guān)聯(lián)的一種特例,所以 belongsTo 和 hasMany 也是相反的關(guān)系。

]]>
http://www.dgkai.cn/blog/view-259.html/feed 312
FleaPHP數(shù)據(jù)表關(guān)聯(lián)設(shè)置 http://www.dgkai.cn/blog/view-256.html http://www.dgkai.cn/blog/view-256.html#comments Tue, 06 Sep 2011 08:13:20 +0000 lin http://www.dgkai.cn/blog/?p=256 目前,F(xiàn)leaPHP支持四種類型的數(shù)據(jù)表關(guān)聯(lián),分別是:

HAS_ONE: 當前表的每一條記錄都擁有最多一條(0–1)關(guān)聯(lián)記錄
HAS_MANY: 當前表的每一條記錄都擁有多條(0-n)關(guān)聯(lián)記錄
MANY_TO_MANY: 當前表的每一條記錄都和其他表的多條(0-n)記錄關(guān)聯(lián)
BELONGS_TO: 當前表的每一條記錄都屬于另一個表的某條記錄

關(guān)聯(lián)中必須設(shè)置的屬性為:
‘name’, // 關(guān)聯(lián)的名字(如:hasOne、hasMany)
‘tableClass’, // 關(guān)聯(lián)的表數(shù)據(jù)入口對象名
‘mappingName’, // 字段映射名

可選屬性:
‘foreignKey’, //外鍵字段名
’sort’, //對關(guān)聯(lián)表進行查詢時使用的排序參數(shù)
‘conditions’, //對關(guān)聯(lián)表進行查詢時使用的條件參數(shù)
‘fields’, //對關(guān)聯(lián)表進行查詢時要獲取的關(guān)聯(lián)表字段
‘limit’, //對關(guān)聯(lián)表進行查詢時限制查出的記錄數(shù)
‘enabled’, //是否處理關(guān)聯(lián),設(shè)置為falses時,不處理該表入口的任何關(guān)聯(lián)。enabled 的優(yōu)先級高于 linkRead、linkCreate、linkUpdate 和 linkRemove。
‘countOnly’, //指示在查詢關(guān)聯(lián)表時是否僅僅統(tǒng)計記錄數(shù),而不實際查詢數(shù)據(jù)
‘counterCache’, //將關(guān)聯(lián)記錄總數(shù)緩存到指定的字段,數(shù)據(jù)表中要建立相應的字段
‘linkRead’, //指示是否在主表讀取記錄時也讀取該關(guān)聯(lián)對應的關(guān)聯(lián)表的記錄,默認ture
‘linkCreate’, //指示是否在主表創(chuàng)建記錄時也創(chuàng)建該關(guān)聯(lián)對應的關(guān)聯(lián)表的記錄,默認ture
‘linkUpdate’, //指示是否在主表更新記錄時也更新該關(guān)聯(lián)對應的關(guān)聯(lián)表的記錄,默認ture
‘linkRemove’, //指示是否在主表刪除記錄時也刪除該關(guān)聯(lián)對應的關(guān)聯(lián)表的記錄,默認ture
‘linkRemoveFillValue’, //當刪除主表記錄而不刪除關(guān)聯(lián)表記錄時,用什么值填充關(guān)聯(lián)表記錄的外鍵字段,默認0
’saveAssocMethod’, //指示當保存關(guān)聯(lián)數(shù)據(jù)時,采用何種方法,默認為 save,可以設(shè)置為 create、update 或 replacevar $belongsTo = array(
‘tableClass’ => ‘Table_Users’,
‘mappingName’ => ‘a(chǎn)uthor’,
‘foreignKey’ => ‘user_id’
);

var $hasOne = array(
‘tableClass’ => ‘Table_Profiles’,
‘mappingName’ => ‘profiles’,
‘foreignKey’ => ‘user_id’,
’saveAssocMethod’=> ’save’
);

var $hasMany = array(
‘tableClass’ => ‘Table_Profiles’,
‘mappingName’ => ‘profiles’,
‘foreignKey’ => ‘user_id’,
’saveAssocMethod’=> ’save’
);

var $manyToMany=array(

);

一個表可以有多個關(guān)聯(lián)
var $hasMany = array(
array(
‘tableClass’ => ‘Model_Permissions’,
‘foreignKey’ => ‘pclass_id’,
‘mappingName’ => ‘permissions’,
),
array(
‘tableClass’ => ‘Model_Products’,
‘foreignKey’ => ‘pclass_id’,
‘mappingName’ => ‘products’,
‘enabled’ => false,
),
[
array(
...
),
]
);
關(guān)聯(lián): 一個關(guān)聯(lián)是一個關(guān)系,這個關(guān)系屬于某一個數(shù)據(jù)表。例如 users 表可能就擁有一個或者多個關(guān)聯(lián)。
主表: 對于一個關(guān)聯(lián),擁有該關(guān)聯(lián)的數(shù)據(jù)表就是主表。例如 posts 表定義了一個 MANY_TO_MANY 關(guān)聯(lián)。
那么在這里(指這個關(guān)聯(lián)),posts 就是主表。

關(guān)聯(lián)表: 在一個關(guān)聯(lián)中,關(guān)聯(lián)表就是除主表外的另一個表。
外鍵: 在數(shù)據(jù)庫原理中,外鍵的含義很復雜。但在 FleaPHP 框架中的數(shù)據(jù)庫關(guān)聯(lián)功能中,
外鍵泛指一個記錄中用于關(guān)聯(lián)另一個記錄的字段。例如 profile 表中的 user_id 字段就是用于關(guān)聯(lián) users 表的字段。
這個 user_id 字段就是一個外鍵。

中間表: 在 MANY_TO_MANY 關(guān)聯(lián)中,除了主表和關(guān)聯(lián)表,還需要另一個表來保存這兩個表的記錄之間的互相關(guān)聯(lián)關(guān)系。
這個表稱為中間表。
HAS_ONE 一對一關(guān)聯(lián)
HAS_ONE 是一種非常簡單的關(guān)聯(lián)關(guān)系。表示一個記錄擁有另一個記錄。這兩個記錄分別位于兩個數(shù)據(jù)表中。

示例
在一個信息管理系統(tǒng)中,users 表用于存儲用戶帳戶的基本信息,例如用戶名、密碼等。
而 profiles 表則用于存儲用戶的個人信息,例如家庭住址、郵政編碼等。

由于每一個用戶(一條 users 表中的記錄)都有一份對應的個人信息(一條 profiles 表中的記錄)。
因此,我們就可以為 users 表定義一個 HAS_ONE 關(guān)聯(lián)。

很明顯,users 表的記錄擁有一條 profiles 表的記錄。因此,當 users 表中的一條記錄被刪除時,
被刪除記錄所擁有的 profiles 表中的關(guān)聯(lián)記錄也會被自動刪除。

表定義
在 HAS_ONE 關(guān)聯(lián)中,要求外鍵放置在關(guān)聯(lián)表中

分別對應FLEA_Db_TableDataGateway表中的 $hasOne,$hasMany,$manyToMany,$belongsTo 屬性

我們下面就用 老師,學生,學生檔案,班級的例子說說這幾個關(guān)系。

以下是SQL代碼:

//學生表
Create TABLE `testDB`.`student` (
`stu_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`stu_name` VARCHAR(20) NOT NULL,
`stu_class_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`stu_id`)
)//學生檔案表
Create TABLE `testDB`.`stu_record` (
`record_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`stu_id` INTEGER UNSIGNED NOT NULL,
`family_add` VARCHAR(150) NULL,
`family_tel` VARCHAR(20) NULL,
PRIMARY KEY (`record_id`)
)

//教師表
Create TABLE `testDB`.`teacher` (
`teacher_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`teacher_id`)
)

//班級表
Create TABLE `testDB`.`classes` (
`class_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`class_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`class_id`)
)

//由于教師與班級是多對多關(guān)系,所有建立一個中間連接表以表示該關(guān)聯(lián)
Create TABLE `testDB`.`link_teacher_classes` (
`link_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_id` INTEGER UNSIGNED NOT NULL,
`class_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`link_id`)
)

現(xiàn)在,建好表之后,我們還要寫幾個繼承自FLEA_Db_TableDataGateway父類的類,以對應數(shù)據(jù)庫中的Student,Teacher,Classes表(連接表不用了)如下:

//學生表對應的類
class Model_Student extends FLEA_Db_TableDataGateway{
var $tableName = ’student’;
var $primaryKey = ’stu_id’;

/*
這是一對一關(guān)系,一個學生對應唯一的一個Record檔案
tableClass 對應要與之關(guān)聯(lián)一對一的表的對象類,即檔案表的類
foreignKey是在檔案表中,對應學生表的一個外鍵接連字段,
用該字段標識該檔案屬于哪個學生
mappingName 就是用于在你查詢學生信息時,學生檔案字段的別名
*/
var $hasOne = array(
’tableClass’ => ‘Model_Record’,
’foreignKey’ => ’stu_id’,
’mappingName’ => ‘record’
);
/*
這是從屬關(guān)系,一個學生屬于某一個班級,換過來說就是班級與學生一對多,
一個班級有多個學生,而學生就只屬于一個班級
tableClass 指定該類要與之有從屬關(guān)系的類,這里是班級類
foreignKey 這里指定的是該表里的連接外表的字段,這里是學生表的班級ID字段
注意:這里的foreignKey指的是本表的字段,而上面hasOne關(guān)系中的foreignKey
指的是外表中的字段,要注意區(qū)分清楚
mappingName這里就不多說了,跟上面的一樣,也是用于顯示區(qū)分的別名
*/
var $belongsTo = array(
array(
’tableClass’ => ‘Model_Classes’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ‘class’
)
);
}//檔案表對應的類
class Model_Record extends FLEA_Db_TableDataGateway{
var $tableName = ’stu_record’;
var $primaryKey = ‘record_id’;
}

//教師表對應的類
class Model_Teacher extends FLEA_Db_TableDataGateway{
var $tableName = ‘teacher’;
var $primaryKey = ‘teacher_id’;

/*
這里確立了教師與班級的多對多關(guān)系,一個教師可以教多個班級
而一個班級也有多個教師
tableClass 指定要建立多對多關(guān)系的表的類
joinTable 這個屬性要注意一個,這個是指定教師表與班級表關(guān)系的連接表
由于二維表的數(shù)據(jù)結(jié)構(gòu)的原因,所以多對多關(guān)系要用一個中間表(即連接表)來表示
連接表中就指明兩個表各自的主鍵ID就可以了,以兩個字段作復合主鍵,如不用復合
主鍵,就新增加一個字段作主鍵也可,這沒關(guān)系
*/
var $manyToMany = array(
array(
’tableClass’ => ‘Model_Classes’,
’mappingName’ => ‘class’,
’joinTable’ => ‘link_teacher_classes’,
)
);
}

class Model_Classes extends FLEA_Db_TableDataGateway{
var $tableName = ‘classes’;
var $primaryKey = ‘class_id’;

/*
這里確立了班級與學生的一對多關(guān)系
tableClass 指定該表的類要與哪個表的類建立一對多關(guān)系
foreignKey 外鍵ID,這里即指定學生表中定義的班級ID,這個是外表的字段
*/
var $hasMany = array(
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’
)
);

var $manyToMany = array(
// 由于多對多關(guān)系是雙向的,所以班級表也可以定義上與教師表的多對多關(guān)系
// 也可以不寫,看需求而定,比如你想查看某個班級信息時,一并顯示該班
// 有多少個任課老師的話,那就在這個班級類里加上關(guān)系,我這里就不寫了。。。
);
}

以上的代碼就建立好了關(guān)系了,現(xiàn)在只管使用就是了。
不過還提醒大家一點,在每個關(guān)系里,都有一個 ‘enabled’ 的屬性,如果設(shè)置為 false的話,則是將該關(guān)系禁掉,所以查詢出來的結(jié)果就沒有該關(guān)系的相應數(shù)據(jù),這樣可以節(jié)省效率,按需要時才打開相應的關(guān)聯(lián),該屬性默認為true 可以如下設(shè)置:

array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’,
‘enabled’ => false
)

現(xiàn)在我們來測試一下數(shù)據(jù)。(事先自行插入幾行數(shù)據(jù)用以測試)

$classManager = FLEA::getSingleton(‘Model_Classes’);
$class =& $classManager->find(array(‘class_id’ => 1));
dump($class);
]]>
http://www.dgkai.cn/blog/view-256.html/feed 365
FleaPHP的數(shù)據(jù)庫查詢條件匯總解析 http://www.dgkai.cn/blog/view-254.html http://www.dgkai.cn/blog/view-254.html#comments Tue, 06 Sep 2011 08:10:46 +0000 lin http://www.dgkai.cn/blog/?p=254 本文將全面分析FleaPHP的數(shù)據(jù)庫查詢條件,包含字符串格式,數(shù)組格式,混合格式,in查詢,or查詢,關(guān)聯(lián)查詢等常用查詢。

FleaPHP的數(shù)據(jù)庫查詢條件$conditions 參數(shù)可以是整數(shù)、字符串和數(shù)組三種類型:

1.如果 $conditions 參數(shù)是一個整數(shù),則假定該整數(shù)為主鍵字段值。
view plaincopy to clipboardprint?
// 查詢主鍵字段值為1的記錄
$user = $tableUsers->find(1);

2.如果 $conditions 參數(shù)是一個字符串,則該字符串將直接作為查詢條件,這種方式可以支持最靈活的查詢條件。 例如:
view plaincopy to clipboardprint?
$conditions = 'id < 3'
$user = $tableUsers->find($conditions);
//生成的where字句為“WHERE id < 3”

3.1.如果 $conditions 參數(shù)是一個數(shù)組,且指定了鍵名和值,則查詢條件中字段名為鍵名,字段值等于鍵值。例如:

// 查詢id字段值為3的記錄
$conditions = array(
'id' => '1',
);
$user = $tableUsers->find($conditions);
//生成的where字句為“WHERE `id` = 1”

3.2.如果 $conditions 參數(shù)是一個數(shù)組,但其中的元素沒有鍵名, 則假定鍵值為自定義查詢條件,例如:

$conditions = array('id = 1');
// 生成的where字句為“WHERE `id` = 1”
$user = $tableUsers->find($conditions);

3.3.$conditions 為數(shù)組時,可以混用字符串和鍵值對兩種風格:

$conditions = array(
'id < 3',
'sex' => 'male',
);
$user = $tableUsers->find($conditions);
// 生成的where字句為“id < 3 AND `sex` = 'male'”
$conditions = array( 'id < 3', 'sex' => 'male',);$user = $tableUsers->find($conditions);// 生成的where字句為“id < 3 AND `sex` = 'male'”
$conditions 為數(shù)組時,多個查詢條件之間將使用 AND 布爾運算符進行連接。

3.4.“in()”查詢在FleaPHP中的實現(xiàn)

我們有時候要用到in這樣的操作,那么在condition里面怎么寫呢?

// 假如主鍵名為“id”,需要查詢id的值為1、2、3其中之一,則可以這樣寫:
$condition = array(
'in()' => array(1,2,3),
)

那么如果不是主鍵的話怎么寫了呢? 也很簡單,提供鍵值對即可。例如:
view plaincopy to clipboardprint?
$condition = array(
'in()' => array(
'username' => array('username1','username2')
)
)

3.5 or查詢的實現(xiàn)

當 $conditions 包含多個元素時,每一個數(shù)組元素都是下列格式的數(shù)組:
array(字段名, 值, 比較操作, 連接下一個條件的操作, 是否是自定義命令)如果“是否是自定義命令”為 true,則“字段名”為自定義的查詢條件,而“值”和“比較操作”兩項將被忽略。
“比較操作”的默認值是“=”;
“連接下一個條件的操作”的默認值是“AND”;
“是否是自定義命令”的默認值是 false。

$conditions = array(
array('username', 'dualface', '=', 'OR'),
array('user_level', 'vip', '>='),
);

生成的 sql 如下

WHERE `username` = 'dualface' OR `user_level` >= 'vip'

實例代碼:
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('Field2','Value2','=','OR'),
array('Field3','Value3','>'),
);

3.6.關(guān)聯(lián)表限制條件

上面介紹的都是相對于主表而言的,那么我們?nèi)绾蝸聿僮麝P(guān)聯(lián)表的條件呢?我們來看下面
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('mappingName.Field',$this->primaryKey,'=','OR'), //這里的field是指關(guān)聯(lián)表中的字段 ,mappingName就是定義關(guān)聯(lián)時候那個影像別名
array('Field2','Value2','>'),
);

4.find(),findAll()函數(shù)中其它參數(shù)的含義和用法如下:
find ( $ conditions,
$ sort = null,
$ fields = '*',
$ queryLinks = true
)
findAll ( $ conditions = null,
$ sort = null,
$ limit = null,
$ fields = '*',
$ queryLinks = true
)

4.1.$sort 參數(shù)指定查詢時的排序方式,類型只能為字符串
例如 'created ASC' 表示按照“created”字段進行從小到大的排序。

4.2.$fields 參數(shù)指定查詢結(jié)果中要包含哪些字段,類型可以為字符串或數(shù)組
當數(shù)據(jù)表的字段很多時,通過指定 $fields 參數(shù)可以避免查詢不需要的字段,從而提高性能。
$fields 參數(shù)即可是以“,”逗號分隔的字段名,也可以是包含多個字段名的數(shù)組,例如:

$fields = array('title', 'created');
//也可以寫成下面的字符串形式,兩種寫法作用相同,區(qū)別在于自動生成的字段名兩邊將會添加上“`”符號,以防止出現(xiàn)字段名與SQL關(guān)鍵字沖突的情況出現(xiàn)。建議手寫時也加上“`”字符
$fields = 'title, created';
$user = $tableUsers->find('id < 10',NULL,$fields);
$fields = array('title', 'created');//也可以寫成下面的字符串形式,兩種寫法作用相同,區(qū)別在于自動生成的字段名兩邊將會添加上“`”符號,以防止出現(xiàn)字段名與SQL關(guān)鍵字沖突的情況出現(xiàn)。建議手寫時也加上“`”字符$fields = 'title, created';$user = $tableUsers->find('id < 10',NULL,$fields);
推薦使用數(shù)組,這樣表數(shù)據(jù)入口處理起來更快一些。

4.3.$queryLinks表示是否啟用關(guān)聯(lián)查詢,默認是啟用的,即默認會查詢關(guān)聯(lián)表(前提是關(guān)聯(lián)設(shè)置屬性enabled是開啟狀態(tài))

下一篇文章將討論一下FleaPHP的數(shù)據(jù)表關(guān)聯(lián)設(shè)置

]]>
http://www.dgkai.cn/blog/view-254.html/feed 274
FleaPHP頁面控件 WebControls的使用 http://www.dgkai.cn/blog/view-131.html http://www.dgkai.cn/blog/view-131.html#comments Tue, 16 Aug 2011 02:31:18 +0000 lin http://www.dgkai.cn/blog/?p=131 如果不使用模板引擎,需要先注冊控件 $ui =& FLEA::initWebControls() ;其實就是返回控件的實例,該函數(shù)的代碼是

00662 function & initWebControls()
00663 {
00664 return FLEA::getSingleton(FLEA::getAppInf('webControlsClassName'));
00665 }

'webControlsClassName'默認是FLEA目錄下的webControls類,該類封裝了頁面組件的實現(xiàn),以及一些常用的頁面控件,在找不到這些自帶控件的時候就會去嘗試搜索我們自定義的以_ctl開頭的控件

/**
* 構(gòu)造一個控件的 HTML 代碼
*
* @param string $type
* @param string $name
* @param array $attribs
* @param boolean $return
*
* @return string
*/
function control($type, $name, $attribs = null, $return = false)
{
$type = strtolower($type);
$render = '_ctl' . ucfirst($type);
$attribs = (array)$attribs;

$__ctl_out = false;
if (method_exists($this, $render)) {
$__ctl_out = $this->{$render}($name, $attribs);
} else {
$extfilename = ucfirst($type) . '.php';
if (!isset($this->_extends[$type])) {
foreach ($this->_extendsDir as $dir) {
if (file_exists($dir . DS . $extfilename)) {
require($dir . DS . $extfilename);
$this->_extends[$type] = true;
break;
}
}
}

if (isset($this->_extends[$type])) {
$__ctl_out = call_user_func_array($render,
array('name' => $name, 'attribs' => $attribs));
}
}

if ($__ctl_out === false) {
$__ctl_out = "INVALID CONTROL TYPE \"{$type}\"";
}

if ($return) { return $__ctl_out; }
echo $__ctl_out;
return '';
}

實例化控件之后,在模版(也就是 .php)中:

1 <?php
2 $ui->control('textbox', 'username',
3 array(
4 'class' => 'textbox',
5 'size' => 28,
6 'maxlength' => 22,
7 )
8 );
9 ?>

如果使用smarty,調(diào)用方式就是:

{ webcontrol type='textbox' value=$textbox_value }
系統(tǒng)會自動去實例化控件對象

]]>
http://www.dgkai.cn/blog/view-131.html/feed 318
Fleaphp 關(guān)閉日志服務 http://www.dgkai.cn/blog/view-44.html http://www.dgkai.cn/blog/view-44.html#comments Sat, 13 Aug 2011 04:44:18 +0000 lin http://www.dgkai.cn/blog/?p=44 fleaphp框架日志服務開啟的時候回產(chǎn)生大量的日志文件,對于大部分寸土寸金的虛擬空間來說是個不小的壓力,只要重新定義一下'logEnabled'這個配置參數(shù),改為false就可以關(guān)閉了

]]>
http://www.dgkai.cn/blog/view-44.html/feed 406
Fleaphp訪問出錯返回404頁面的方法 http://www.dgkai.cn/blog/view-33.html http://www.dgkai.cn/blog/view-33.html#comments Sun, 07 Aug 2011 08:29:00 +0000 lin http://www.dgkai.cn/blog/?p=33 配置文件里有項 : 'dispatcherFailedCallback' , 他用來設(shè)置當調(diào)度器失敗時調(diào)用的方法。
應用很靈活, 舉個例子, 當控制器或控制器動作不存在就跳到定制的404頁面。

FLEA::setAppInf('dispatcherFailedCallback', 'onDispatcherFailed');

function onDispatcherFailed

{

redirect('404.html');

}

 

dispatcherFailedCallback的配置分2種情況,如果當前訪問的控制器、動作不存:'dispatcherFailedCallback' => 'onDispatcherFailedCallback',
如果用戶設(shè)置了RABC訪問控制,訪問無法訪問的動作時:'dispatcherAuthFailedCallback' => 'onAuthFailedCallback',
上面onDispatcherFailedCallback、onAuthFailedCallback是出錯的時候調(diào)用的函數(shù),你可以在index.php種定義這2個函數(shù)就OK了。
例如:
function onAuthFailedCallback($controller,$action)
{

redirect(url('Login','Index')); // 這里是驗證失敗時,讓用戶去登錄
}

]]>
http://www.dgkai.cn/blog/view-33.html/feed 414