2011/09/10 at 10:26
由于工作性質(zhì)的關(guān)系,整天上班8個(gè)小時(shí)要做在電腦前,下班回家還是對(duì)著電腦,現(xiàn)在脖子經(jīng)常疼痛并且僵硬,看來頸椎出問題了,看到一篇文章講述保護(hù)頸椎的,就轉(zhuǎn)過來了。
頸椎的24小時(shí)保養(yǎng)
亡羊補(bǔ)牢永遠(yuǎn)比不上未雨綢繆,與其等到頸椎受傷,再去接受長(zhǎng)期繁瑣的治療,還不如先發(fā)制人,主動(dòng)出擊,讓頸椎受到我們的精心照顧,不發(fā)生事故。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈一7:00
早晨主動(dòng)調(diào)溫
古人喜歡穿長(zhǎng)衣服,一方面是為了禮儀,其實(shí)另一方面也是養(yǎng)生之需。無論冬夏,都要給自己的頸椎以舒適的溫度。 即使是為了美麗,也要在辦公室準(zhǔn)備一件披肩,以保護(hù)好頸背部。偶然有受寒現(xiàn)象,給自己煎一碗驅(qū)寒湯:材料是紅糖2湯匙、生姜7片,水煎10分鐘,飲用 1~2次就可以驅(qū)走寒氣。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈二10:00
5分鐘的頸椎操
即使身處人多的辦公室,你也可以很好地保養(yǎng)頸椎,比如利用工間休息練習(xí)一下頸椎操:端坐,全身不動(dòng),單頭部運(yùn)動(dòng),分別做低頭、抬頭、左轉(zhuǎn)、右轉(zhuǎn)、前伸、后縮;順、逆時(shí)針環(huán)繞動(dòng)作。每次堅(jiān)持5分鐘,動(dòng)作要輕緩、柔和。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈三14:00
兩種按摩的方法
經(jīng)過一個(gè)上午的工作,到了下午兩點(diǎn)鐘,可能脖子早已疲憊不堪,精力有些不支,這里有兩個(gè)最簡(jiǎn)單的急救方法:
(1)脖子后面,從頭顱底端到軀干上部這一段分布著百勞穴的3個(gè)點(diǎn)。在不遺余力工作時(shí),不妨抽出短短幾分鐘來按摩這3個(gè)反應(yīng)點(diǎn),即刻緩解頸椎疲勞,放松全身。
(2)兩手手指互相交叉,放在頸部后方,來回摩擦頸部,力度要輕柔,連續(xù)摩擦50次,頸部發(fā)熱后,會(huì)有很放松和舒適的感覺。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈四18:00
做做戶外運(yùn)動(dòng)
軟骨組織的營(yíng)養(yǎng)可不是通過血液供給的,而是通過壓力的變化來進(jìn)行營(yíng)養(yǎng)交換。如果缺乏活動(dòng)的話,軟骨就會(huì)遭遇營(yíng)養(yǎng)不良,進(jìn)而導(dǎo)致退化,增加戶外活動(dòng)是養(yǎng)護(hù)頸椎的方法之一,要向你推薦的運(yùn)動(dòng)項(xiàng)目是游泳、打球、練瑜伽等。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈五20:00
晚餐補(bǔ)腎加分
作為一位忙碌的白領(lǐng),你可能沒有足夠時(shí)間準(zhǔn)備健康營(yíng)養(yǎng)的早餐和午餐,那晚餐的時(shí)候可以吃一些營(yíng)養(yǎng)骨髓的食物。中醫(yī)認(rèn)為胡桃、山萸肉、生地、黑芝麻、牛骨等具有補(bǔ)腎髓功能,可以把這些材料加入到你的晚餐中,以起到強(qiáng)壯筋骨,推遲腎與脊柱蛻變的效果。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈六21:00
學(xué)學(xué)大鵬展翅
看電視的時(shí)候,你可以學(xué)一學(xué)大鵬展翅:輕輕彎腰至90度,兩個(gè)手臂模仿大鵬飛行一樣伸展開,但可不要將頭抬起來,越高越好,堅(jiān)持5分鐘。這個(gè)動(dòng)作可以幫助你增加頸椎部肌肉的韌性。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈七22:00
享受中藥熱敷
將小茴香些許、鹽半斤一起炒熱,裝入布袋,放在頸背部熱敷30分鐘。每日1次??筛纳祁i背部血循環(huán),緩解肌肉痙攣。注意,別讓溫度太高或時(shí)間過久。
人體頸椎的24小時(shí)養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈八23:00
選擇健康枕頭
枕頭和床也是頸椎的親密伴侶,枕頭過高或者過低,床墊過于柔軟都會(huì)連累頸椎。枕頭寬度應(yīng)達(dá)肩部,中間低,兩端高的元寶形的保健枕頭對(duì)頸椎有很好的支撐作用,可以讓頸椎得到很好的休息;對(duì)于頸椎不好的人來說,木板床、棕繃床是上選,而那種過分柔軟的床肯定不利于頸椎。
2011/09/08 at 16:45
題目有點(diǎn)繞口,大概的意思是
php已經(jīng)賦給模版一個(gè)數(shù)組,數(shù)組的信息如下:
$config= array(
1=>'中山',
2=>'石岐'
);
數(shù)據(jù)庫存儲(chǔ)地區(qū)的字段記錄的是該數(shù)組的鍵名,如1,現(xiàn)在要在模版上顯示:中山。
如果這樣寫會(huì)報(bào)錯(cuò):
{{$config.$row.region}}
模版上的正確的寫法是:{{$config[$row.region]}}
今天遇到的問題還更復(fù)雜一點(diǎn),數(shù)據(jù)庫字段存儲(chǔ)的是一些配置的序列化,所以在調(diào)取地區(qū)信息時(shí)還需要進(jìn)行反序列化處理,中間必須有一個(gè)賦值的過程:
{{assign var=param value=$l.params|unserialize}}
然后$param.region就可以取得1這個(gè)值了
標(biāo)簽:
php,
smarty
2011/09/06 at 18:06
定義從屬關(guān)聯(lián)
1、外鍵放置在主表中;
2、保存時(shí)不會(huì)自動(dòng)更新關(guān)聯(lián)表的記錄;
3、刪除時(shí)也不會(huì)更新關(guān)聯(lián)表的記錄。
示例:
多個(gè)文章都屬于某一個(gè)欄目。
格式一:
* class Articles
* {
* var $belongsTo = array(
* array(
* ’tableClass’ => ‘Columns’,
* ’foreignKey’ => ‘column_id’,
* ’mappingName’ => ‘column’
* ),
* );
* }
在上面的格式中,foreignKey 表示在當(dāng)前表中用什么字段存儲(chǔ)對(duì)關(guān)聯(lián)表的主鍵引用。
mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Articles
* {
* var $belongsTo = ‘Columns’;
* }
格式二是一種簡(jiǎn)化寫法。foreignKey 字段名將和關(guān)聯(lián)表的主鍵字段名相同。
============================
$hasMany
定義一對(duì)多關(guān)聯(lián)
1、外鍵保存在關(guān)聯(lián)表中;
2、保存時(shí)自動(dòng)更新關(guān)聯(lián)表的記錄;
3、刪除主表記錄時(shí)自動(dòng)刪除關(guān)聯(lián)記錄。
示例:
每個(gè)用戶(user)有多張訂單 order。
格式一:
* class Users
* {
* var $hasMany = array(
* array(
* ’tableClass’ => ‘Orders’,
* ’foreignKey’ => ‘user_id’,
* ’mappingName’ => ‘orders’,
* ),
* );
* }
在一對(duì)多關(guān)系中,當(dāng)前表并不包含對(duì)關(guān)聯(lián)表的主鍵引用。
而是在關(guān)聯(lián)表中保存對(duì)當(dāng)前表的主鍵引用。
在上面的格式中,foreignKey 指示在關(guān)聯(lián)表中用什么字段存儲(chǔ)對(duì)當(dāng)前表的主鍵引用。
mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Users
* {
* var $hasMany = ‘Orders’;
* }
簡(jiǎn)化寫法中,foreignKey 字段名將和當(dāng)前表的主鍵字段名相同。
============================
$hasOne
定義一對(duì)一關(guān)聯(lián)
1、外鍵放置在關(guān)聯(lián)表中;
2、保存時(shí)如果有關(guān)聯(lián)對(duì)象,則自動(dòng)創(chuàng)建或更新關(guān)聯(lián)表的記錄;
3、刪除主表記錄時(shí)自動(dòng)刪除關(guān)聯(lián)記錄。
示例:
當(dāng)前表為 users,用于存儲(chǔ)用戶賬戶。而每個(gè)用戶賬戶有且只有一個(gè)對(duì)應(yīng)的個(gè)人信息(profile)記錄。
格式一:
* class Users
* {
* var $hasOne = array(
* array(
* ’tableClass’ => ‘Profiles’,
* ’foreignKey’ => ‘profile_id’,
* ’mappingName’ => ‘profile’,
* ),
* );
* }
在上面的格式中,foreignKey 表示在關(guān)聯(lián)表中用什么字段存儲(chǔ)對(duì)主表的主鍵引用。 mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。 如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Users
* {
* var $hasOne = ‘Profiles’;
* }
格式二是一種簡(jiǎn)化寫法。foreignKey 字段名將和主表的主鍵字段名名相同。
============================
$manyToMany
定義多對(duì)多關(guān)聯(lián)
1、外鍵保存在中間表里面;
2、保存時(shí)自動(dòng)更新中間表;
3、刪除主表記錄時(shí)自動(dòng)刪除中間表的相關(guān)記錄。
示例:
每個(gè)成員(member)可以擁有多個(gè)角色(role),而每個(gè)角色也可以指定給多個(gè)成員。
格式一:
* class Members
* {
* var $manyToMany = array(
* array(
* ’tableClass’ => ‘Roles’,
* ’joinTable’ => ‘member_roles’,
* ’foreignKey’ => ‘member_id’,
* ’assocforeignKey’ => ‘role_id’,
* ’mappingName’ => ‘roles’,
* ),
* );
* }
在多對(duì)多關(guān)系中,當(dāng)前表并不包含對(duì)關(guān)聯(lián)表的主鍵引用。
而是在一個(gè)中間表里面保存對(duì)當(dāng)前表和關(guān)聯(lián)表的主鍵引用。
在上面的格式中,joinTable 表示中間表的名字。foreignKey 和
assocforeignKey 分別表示在中間表里面用什么字段存儲(chǔ)對(duì)主表和
關(guān)聯(lián)表主鍵字段的引用。
mappingName 表示在主表的返回結(jié)果中,以什么名字保存關(guān)聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Members
* {
* var $manyToMany = ‘Roles’;
* }
簡(jiǎn)化寫法中,foreignKey 字段名將和當(dāng)前表的主鍵字段名相同。
assocforeignKey字段名稱則和關(guān)聯(lián)數(shù)據(jù)表的主鍵字段名相同。
而中間表名稱將用FLEA_Db_TableDataGateway::getMidtableName() 方法計(jì)算。
hasOne 是一對(duì)多關(guān)聯(lián),表示一條主表記錄有一條對(duì)應(yīng)的關(guān)聯(lián)記錄。
而 belongsTo 是從屬關(guān)聯(lián),表示一條主表記錄屬于另一條關(guān)聯(lián)記錄。
hasOne 和 belongsTo 正好是相反的關(guān)系。
例如 “一個(gè)用戶”有一個(gè)“個(gè)人空間”。那么一個(gè)“個(gè)人空間”就屬于“一個(gè)用戶”。
由于 hasOne 實(shí)際上是 hasMany (一對(duì)多)關(guān)聯(lián)的一種特例,所以 belongsTo 和 hasMany 也是相反的關(guān)系。
標(biāo)簽:
fleaphp,
php
2011/09/06 at 16:13
目前,F(xiàn)leaPHP支持四種類型的數(shù)據(jù)表關(guān)聯(lián),分別是:
HAS_ONE: 當(dāng)前表的每一條記錄都擁有最多一條(0–1)關(guān)聯(lián)記錄
HAS_MANY: 當(dāng)前表的每一條記錄都擁有多條(0-n)關(guān)聯(lián)記錄
MANY_TO_MANY: 當(dāng)前表的每一條記錄都和其他表的多條(0-n)記錄關(guān)聯(lián)
BELONGS_TO: 當(dāng)前表的每一條記錄都屬于另一個(gè)表的某條記錄
關(guān)聯(lián)中必須設(shè)置的屬性為:
‘name’, // 關(guān)聯(lián)的名字(如:hasOne、hasMany)
‘tableClass’, // 關(guān)聯(lián)的表數(shù)據(jù)入口對(duì)象名
‘mappingName’, // 字段映射名
可選屬性:
‘foreignKey’, //外鍵字段名
’sort’, //對(duì)關(guān)聯(lián)表進(jìn)行查詢時(shí)使用的排序參數(shù)
‘conditions’, //對(duì)關(guān)聯(lián)表進(jìn)行查詢時(shí)使用的條件參數(shù)
‘fields’, //對(duì)關(guān)聯(lián)表進(jìn)行查詢時(shí)要獲取的關(guān)聯(lián)表字段
‘limit’, //對(duì)關(guān)聯(lián)表進(jìn)行查詢時(shí)限制查出的記錄數(shù)
‘enabled’, //是否處理關(guān)聯(lián),設(shè)置為falses時(shí),不處理該表入口的任何關(guān)聯(lián)。enabled 的優(yōu)先級(jí)高于 linkRead、linkCreate、linkUpdate 和 linkRemove。
‘countOnly’, //指示在查詢關(guān)聯(lián)表時(shí)是否僅僅統(tǒng)計(jì)記錄數(shù),而不實(shí)際查詢數(shù)據(jù)
‘counterCache’, //將關(guān)聯(lián)記錄總數(shù)緩存到指定的字段,數(shù)據(jù)表中要建立相應(yīng)的字段
‘linkRead’, //指示是否在主表讀取記錄時(shí)也讀取該關(guān)聯(lián)對(duì)應(yīng)的關(guān)聯(lián)表的記錄,默認(rèn)ture
‘linkCreate’, //指示是否在主表創(chuàng)建記錄時(shí)也創(chuàng)建該關(guān)聯(lián)對(duì)應(yīng)的關(guān)聯(lián)表的記錄,默認(rèn)ture
‘linkUpdate’, //指示是否在主表更新記錄時(shí)也更新該關(guān)聯(lián)對(duì)應(yīng)的關(guān)聯(lián)表的記錄,默認(rèn)ture
‘linkRemove’, //指示是否在主表刪除記錄時(shí)也刪除該關(guān)聯(lián)對(duì)應(yīng)的關(guān)聯(lián)表的記錄,默認(rèn)ture
‘linkRemoveFillValue’, //當(dāng)刪除主表記錄而不刪除關(guān)聯(lián)表記錄時(shí),用什么值填充關(guān)聯(lián)表記錄的外鍵字段,默認(rèn)0
’saveAssocMethod’, //指示當(dāng)保存關(guān)聯(lián)數(shù)據(jù)時(shí),采用何種方法,默認(rèn)為 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(
);
一個(gè)表可以有多個(gè)關(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): 一個(gè)關(guān)聯(lián)是一個(gè)關(guān)系,這個(gè)關(guān)系屬于某一個(gè)數(shù)據(jù)表。例如 users 表可能就擁有一個(gè)或者多個(gè)關(guān)聯(lián)。
主表: 對(duì)于一個(gè)關(guān)聯(lián),擁有該關(guān)聯(lián)的數(shù)據(jù)表就是主表。例如 posts 表定義了一個(gè) MANY_TO_MANY 關(guān)聯(lián)。
那么在這里(指這個(gè)關(guān)聯(lián)),posts 就是主表。
關(guān)聯(lián)表: 在一個(gè)關(guān)聯(lián)中,關(guān)聯(lián)表就是除主表外的另一個(gè)表。
外鍵: 在數(shù)據(jù)庫原理中,外鍵的含義很復(fù)雜。但在 FleaPHP 框架中的數(shù)據(jù)庫關(guān)聯(lián)功能中,
外鍵泛指一個(gè)記錄中用于關(guān)聯(lián)另一個(gè)記錄的字段。例如 profile 表中的 user_id 字段就是用于關(guān)聯(lián) users 表的字段。
這個(gè) user_id 字段就是一個(gè)外鍵。
中間表: 在 MANY_TO_MANY 關(guān)聯(lián)中,除了主表和關(guān)聯(lián)表,還需要另一個(gè)表來保存這兩個(gè)表的記錄之間的互相關(guān)聯(lián)關(guān)系。
這個(gè)表稱為中間表。
HAS_ONE 一對(duì)一關(guān)聯(lián)
HAS_ONE 是一種非常簡(jiǎn)單的關(guān)聯(lián)關(guān)系。表示一個(gè)記錄擁有另一個(gè)記錄。這兩個(gè)記錄分別位于兩個(gè)數(shù)據(jù)表中。
示例
在一個(gè)信息管理系統(tǒng)中,users 表用于存儲(chǔ)用戶帳戶的基本信息,例如用戶名、密碼等。
而 profiles 表則用于存儲(chǔ)用戶的個(gè)人信息,例如家庭住址、郵政編碼等。
由于每一個(gè)用戶(一條 users 表中的記錄)都有一份對(duì)應(yīng)的個(gè)人信息(一條 profiles 表中的記錄)。
因此,我們就可以為 users 表定義一個(gè) HAS_ONE 關(guān)聯(lián)。
很明顯,users 表的記錄擁有一條 profiles 表的記錄。因此,當(dāng) users 表中的一條記錄被刪除時(shí),
被刪除記錄所擁有的 profiles 表中的關(guān)聯(lián)記錄也會(huì)被自動(dòng)刪除。
表定義
在 HAS_ONE 關(guān)聯(lián)中,要求外鍵放置在關(guān)聯(lián)表中
分別對(duì)應(yīng)FLEA_Db_TableDataGateway表中的 $hasOne,$hasMany,$manyToMany,$belongsTo 屬性
我們下面就用 老師,學(xué)生,學(xué)生檔案,班級(jí)的例子說說這幾個(gè)關(guān)系。
以下是SQL代碼:
//學(xué)生表
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`)
)//學(xué)生檔案表
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`)
)
//班級(jí)表
Create TABLE `testDB`.`classes` (
`class_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`class_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`class_id`)
)
//由于教師與班級(jí)是多對(duì)多關(guān)系,所有建立一個(gè)中間連接表以表示該關(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)在,建好表之后,我們還要寫幾個(gè)繼承自FLEA_Db_TableDataGateway父類的類,以對(duì)應(yīng)數(shù)據(jù)庫中的Student,Teacher,Classes表(連接表不用了)如下:
//學(xué)生表對(duì)應(yīng)的類
class Model_Student extends FLEA_Db_TableDataGateway{
var $tableName = ’student’;
var $primaryKey = ’stu_id’;
/*
這是一對(duì)一關(guān)系,一個(gè)學(xué)生對(duì)應(yīng)唯一的一個(gè)Record檔案
tableClass 對(duì)應(yīng)要與之關(guān)聯(lián)一對(duì)一的表的對(duì)象類,即檔案表的類
foreignKey是在檔案表中,對(duì)應(yīng)學(xué)生表的一個(gè)外鍵接連字段,
用該字段標(biāo)識(shí)該檔案屬于哪個(gè)學(xué)生
mappingName 就是用于在你查詢學(xué)生信息時(shí),學(xué)生檔案字段的別名
*/
var $hasOne = array(
’tableClass’ => ‘Model_Record’,
’foreignKey’ => ’stu_id’,
’mappingName’ => ‘record’
);
/*
這是從屬關(guān)系,一個(gè)學(xué)生屬于某一個(gè)班級(jí),換過來說就是班級(jí)與學(xué)生一對(duì)多,
一個(gè)班級(jí)有多個(gè)學(xué)生,而學(xué)生就只屬于一個(gè)班級(jí)
tableClass 指定該類要與之有從屬關(guān)系的類,這里是班級(jí)類
foreignKey 這里指定的是該表里的連接外表的字段,這里是學(xué)生表的班級(jí)ID字段
注意:這里的foreignKey指的是本表的字段,而上面hasOne關(guān)系中的foreignKey
指的是外表中的字段,要注意區(qū)分清楚
mappingName這里就不多說了,跟上面的一樣,也是用于顯示區(qū)分的別名
*/
var $belongsTo = array(
array(
’tableClass’ => ‘Model_Classes’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ‘class’
)
);
}//檔案表對(duì)應(yīng)的類
class Model_Record extends FLEA_Db_TableDataGateway{
var $tableName = ’stu_record’;
var $primaryKey = ‘record_id’;
}
//教師表對(duì)應(yīng)的類
class Model_Teacher extends FLEA_Db_TableDataGateway{
var $tableName = ‘teacher’;
var $primaryKey = ‘teacher_id’;
/*
這里確立了教師與班級(jí)的多對(duì)多關(guān)系,一個(gè)教師可以教多個(gè)班級(jí)
而一個(gè)班級(jí)也有多個(gè)教師
tableClass 指定要建立多對(duì)多關(guān)系的表的類
joinTable 這個(gè)屬性要注意一個(gè),這個(gè)是指定教師表與班級(jí)表關(guān)系的連接表
由于二維表的數(shù)據(jù)結(jié)構(gòu)的原因,所以多對(duì)多關(guān)系要用一個(gè)中間表(即連接表)來表示
連接表中就指明兩個(gè)表各自的主鍵ID就可以了,以兩個(gè)字段作復(fù)合主鍵,如不用復(fù)合
主鍵,就新增加一個(gè)字段作主鍵也可,這沒關(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’;
/*
這里確立了班級(jí)與學(xué)生的一對(duì)多關(guān)系
tableClass 指定該表的類要與哪個(gè)表的類建立一對(duì)多關(guān)系
foreignKey 外鍵ID,這里即指定學(xué)生表中定義的班級(jí)ID,這個(gè)是外表的字段
*/
var $hasMany = array(
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’
)
);
var $manyToMany = array(
// 由于多對(duì)多關(guān)系是雙向的,所以班級(jí)表也可以定義上與教師表的多對(duì)多關(guān)系
// 也可以不寫,看需求而定,比如你想查看某個(gè)班級(jí)信息時(shí),一并顯示該班
// 有多少個(gè)任課老師的話,那就在這個(gè)班級(jí)類里加上關(guān)系,我這里就不寫了。。。
);
}
以上的代碼就建立好了關(guān)系了,現(xiàn)在只管使用就是了。
不過還提醒大家一點(diǎn),在每個(gè)關(guān)系里,都有一個(gè) ‘enabled’ 的屬性,如果設(shè)置為 false的話,則是將該關(guān)系禁掉,所以查詢出來的結(jié)果就沒有該關(guān)系的相應(yīng)數(shù)據(jù),這樣可以節(jié)省效率,按需要時(shí)才打開相應(yīng)的關(guān)聯(lián),該屬性默認(rèn)為true 可以如下設(shè)置:
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’,
‘enabled’ => false
)
現(xiàn)在我們來測(cè)試一下數(shù)據(jù)。(事先自行插入幾行數(shù)據(jù)用以測(cè)試)
$classManager = FLEA::getSingleton(‘Model_Classes’);
$class =& $classManager->find(array(‘class_id’ => 1));
dump($class);
標(biāo)簽:
fleaphp,
php
2011/09/06 at 16:10
本文將全面分析FleaPHP的數(shù)據(jù)庫查詢條件,包含字符串格式,數(shù)組格式,混合格式,in查詢,or查詢,關(guān)聯(lián)查詢等常用查詢。
FleaPHP的數(shù)據(jù)庫查詢條件$conditions 參數(shù)可以是整數(shù)、字符串和數(shù)組三種類型:
1.如果 $conditions 參數(shù)是一個(gè)整數(shù),則假定該整數(shù)為主鍵字段值。
view plaincopy to clipboardprint?
// 查詢主鍵字段值為1的記錄
$user = $tableUsers->find(1);
2.如果 $conditions 參數(shù)是一個(gè)字符串,則該字符串將直接作為查詢條件,這種方式可以支持最靈活的查詢條件。 例如:
view plaincopy to clipboardprint?
$conditions = 'id < 3'
$user = $tableUsers->find($conditions);
//生成的where字句為“WHERE id < 3”
3.1.如果 $conditions 參數(shù)是一個(gè)數(shù)組,且指定了鍵名和值,則查詢條件中字段名為鍵名,字段值等于鍵值。例如:
// 查詢id字段值為3的記錄
$conditions = array(
'id' => '1',
);
$user = $tableUsers->find($conditions);
//生成的where字句為“WHERE `id` = 1”
3.2.如果 $conditions 參數(shù)是一個(gè)數(shù)組,但其中的元素沒有鍵名, 則假定鍵值為自定義查詢條件,例如:
$conditions = array('id = 1');
// 生成的where字句為“WHERE `id` = 1”
$user = $tableUsers->find($conditions);
3.3.$conditions 為數(shù)組時(shí),可以混用字符串和鍵值對(duì)兩種風(fēng)格:
$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ù)組時(shí),多個(gè)查詢條件之間將使用 AND 布爾運(yùn)算符進(jìn)行連接。
3.4.“in()”查詢?cè)贔leaPHP中的實(shí)現(xiàn)
我們有時(shí)候要用到in這樣的操作,那么在condition里面怎么寫呢?
// 假如主鍵名為“id”,需要查詢id的值為1、2、3其中之一,則可以這樣寫:
$condition = array(
'in()' => array(1,2,3),
)
那么如果不是主鍵的話怎么寫了呢? 也很簡(jiǎn)單,提供鍵值對(duì)即可。例如:
view plaincopy to clipboardprint?
$condition = array(
'in()' => array(
'username' => array('username1','username2')
)
)
3.5 or查詢的實(shí)現(xiàn)
當(dāng) $conditions 包含多個(gè)元素時(shí),每一個(gè)數(shù)組元素都是下列格式的數(shù)組:
array(字段名, 值, 比較操作, 連接下一個(gè)條件的操作, 是否是自定義命令)如果“是否是自定義命令”為 true,則“字段名”為自定義的查詢條件,而“值”和“比較操作”兩項(xiàng)將被忽略。
“比較操作”的默認(rèn)值是“=”;
“連接下一個(gè)條件的操作”的默認(rèn)值是“AND”;
“是否是自定義命令”的默認(rèn)值是 false。
$conditions = array(
array('username', 'dualface', '=', 'OR'),
array('user_level', 'vip', '>='),
);
生成的 sql 如下
WHERE `username` = 'dualface' OR `user_level` >= 'vip'
實(shí)例代碼:
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('Field2','Value2','=','OR'),
array('Field3','Value3','>'),
);
3.6.關(guān)聯(lián)表限制條件
上面介紹的都是相對(duì)于主表而言的,那么我們?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)時(shí)候那個(gè)影像別名
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ù)指定查詢時(shí)的排序方式,類型只能為字符串
例如 'created ASC' 表示按照“created”字段進(jìn)行從小到大的排序。
4.2.$fields 參數(shù)指定查詢結(jié)果中要包含哪些字段,類型可以為字符串或數(shù)組
當(dāng)數(shù)據(jù)表的字段很多時(shí),通過指定 $fields 參數(shù)可以避免查詢不需要的字段,從而提高性能。
$fields 參數(shù)即可是以“,”逗號(hào)分隔的字段名,也可以是包含多個(gè)字段名的數(shù)組,例如:
$fields = array('title', 'created');
//也可以寫成下面的字符串形式,兩種寫法作用相同,區(qū)別在于自動(dòng)生成的字段名兩邊將會(huì)添加上“`”符號(hào),以防止出現(xiàn)字段名與SQL關(guān)鍵字沖突的情況出現(xiàn)。建議手寫時(shí)也加上“`”字符
$fields = 'title, created';
$user = $tableUsers->find('id < 10',NULL,$fields);
$fields = array('title', 'created');//也可以寫成下面的字符串形式,兩種寫法作用相同,區(qū)別在于自動(dòng)生成的字段名兩邊將會(huì)添加上“`”符號(hào),以防止出現(xiàn)字段名與SQL關(guān)鍵字沖突的情況出現(xiàn)。建議手寫時(shí)也加上“`”字符$fields = 'title, created';$user = $tableUsers->find('id < 10',NULL,$fields);
推薦使用數(shù)組,這樣表數(shù)據(jù)入口處理起來更快一些。
4.3.$queryLinks表示是否啟用關(guān)聯(lián)查詢,默認(rèn)是啟用的,即默認(rèn)會(huì)查詢關(guān)聯(lián)表(前提是關(guān)聯(lián)設(shè)置屬性enabled是開啟狀態(tài))
下一篇文章將討論一下FleaPHP的數(shù)據(jù)表關(guān)聯(lián)設(shè)置
標(biāo)簽:
fleaphp,
php
2011/09/03 at 10:11
一個(gè)網(wǎng)站的robots文件對(duì)于做seo是至關(guān)重要的,它可以限制搜索引擎蜘蛛抓取不該收錄的目錄或者頁面,避免資源的浪費(fèi),它的規(guī)則主要有以下幾點(diǎn):
1) User-Agent鍵
后面的內(nèi)容對(duì)應(yīng)的是各個(gè)具體的搜索引擎爬行器的名稱。如百度是Baiduspider,谷歌是Googlebot。
一般我們這樣寫:
User-Agent: *
表示允許所有搜索引擎蜘蛛來爬行抓取。如果只想讓某一個(gè)搜索引擎蜘蛛來爬行,在后面列出名字即可。如果是多個(gè),則重復(fù)寫。
注意:User-Agent:后面要有一個(gè)空格。
在robots.txt中,鍵后面加:號(hào),后面必有一個(gè)空格,和值相區(qū)分開。
2)Disallow鍵
該鍵用來說明不允許搜索引擎蜘蛛抓取的URL路徑。
例如:Disallow: /index.php 禁止網(wǎng)站index.php文件
Allow鍵
該鍵說明允許搜索引擎蜘蛛爬行的URL路徑
例如:Allow: /index.php 允許網(wǎng)站的index.php
通配符*
代表任意多個(gè)字符
例如:Disallow: /*.jpg 網(wǎng)站所有的jpg文件被禁止了。
結(jié)束符$
表示以前面字符結(jié)束的url。
例如:Disallow: /?$ 網(wǎng)站所有以?結(jié)尾的文件被禁止。
應(yīng)該注意的是:
1,在"/robots.txt"文件中,至少要有一條Disallow記錄,允許收錄優(yōu)先級(jí)要高于禁止收錄,如
User-agent: *
Allow: /a/b.htm
Disallow: /a/
則a目錄下b.htm可以訪問,其他禁止
2,注意路徑后面加斜杠和不加斜杠的區(qū)別
如果目錄后邊帶斜杠,那么訪問不帶斜杠的地址時(shí)還是可以訪問目錄首頁,如果想屏蔽掉整個(gè)目錄,建議不帶斜杠
Allow或Disallow的值 |
URL |
匹配結(jié)果 |
/tmp |
/tmp |
yes |
/tmp |
/tmp.html |
yes |
/tmp |
/tmp/a.html |
yes |
/tmp/ |
/tmp |
no |
/tmp/ |
/tmphoho |
no |
/tmp/ |
/tmp/a.html |
yes |
|
/Hello* |
/Hello.html |
yes |
/He*lo |
/Hello,lolo |
yes |
/Heap*lo |
/Hello,lolo |
no |
html$ |
/tmpa.html |
yes |
/a.html$ |
/a.html |
yes |
htm$ |
/a.html |
no |
3,robots文件只有放在根目錄才有效,放在子目錄沒效。
4,robots.txt文件用法舉例
例1. 禁止所有搜索引擎訪問網(wǎng)站的任何部分 |
User-agent: *
Disallow: / |
例2. 允許所有的robot訪問
(或者也可以建一個(gè)空文件 “/robots.txt”) |
User-agent: *
Disallow:
或者
User-agent: *
Allow: / |
例3. 僅禁止Baiduspider訪問您的網(wǎng)站 |
User-agent: Baiduspider
Disallow: / |
例4. 僅允許Baiduspider訪問您的網(wǎng)站 |
User-agent: Baiduspider
Disallow:
User-agent: *
Disallow: / |
例5. 禁止spider訪問特定目錄
在這個(gè)例子中,該網(wǎng)站有三個(gè)目錄對(duì)搜索引擎的訪問做了限制,即robot不會(huì)訪問這三個(gè)目錄。需要注意的是對(duì)每一個(gè)目錄必須分開聲明,而不能寫成 “Disallow: /cgi-bin/ /tmp/”。 |
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/ |
例6. 允許訪問特定目錄中的部分url |
User-agent: *
Allow: /cgi-bin/see
Allow: /tmp/hi
Allow: /~joe/look
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/ |
例7. 使用”*”限制訪問url
禁止訪問/cgi-bin/目錄下的所有以”.htm”為后綴的URL(包含子目錄)。 |
User-agent: *
Disallow: /cgi-bin/*.htm
|
例8. 使用”$”限制訪問url
僅允許訪問以”.htm”為后綴的URL。 |
User-agent: *
Allow: .htm$
Disallow: / |
例9. 禁止訪問網(wǎng)站中所有的動(dòng)態(tài)頁面 |
User-agent: *
Disallow: /*?* |
例10. 禁止Baiduspider抓取網(wǎng)站上所有圖片
僅允許抓取網(wǎng)頁,禁止抓取任何圖片。 |
User-agent: Baiduspider
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .gif$
Disallow: .png$
Disallow: .bmp$ |
例11. 僅允許Baiduspider抓取網(wǎng)頁和.gif格式圖片
允許抓取網(wǎng)頁和gif格式圖片,不允許抓取其他格式圖片 |
User-agent: Baiduspider
Allow: .gif$
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .png$
Disallow: .bmp$ |
例12. 僅禁止Baiduspider抓取.jpg格式圖片 |
User-agent: Baiduspider
Disallow: .jpg$ |
標(biāo)簽:
robots,
seo
2011/09/01 at 09:34
解決WordPress半角引號(hào)自動(dòng)轉(zhuǎn)換為全角引號(hào)問題有許多種方法,有插件,有修改源碼,有修改主題,下面介紹兩種:
一、通過修改主題functions.php實(shí)現(xiàn)(推薦使用):
在主題functions.php文件中加入以下代碼:
/*禁用半角引號(hào)自動(dòng)轉(zhuǎn)換為全角引號(hào)*/
remove_filter('the_content','wptexturize');
二、通過修改WP源文件實(shí)現(xiàn):
注釋掉 wp-includes\formatting.php文件的下列兩行代碼即可
$curl = str_replace($static_characters, $static_replacements, $curl);
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
標(biāo)簽:
wordpress
2011/08/30 at 16:20
昨天已經(jīng)解決了flowplayer播放swf出現(xiàn)的重聲問題,但是還有一個(gè)問題就是下面controls控制菜單依然失效,沒辦法,客戶建議直接隱藏掉,下面是代碼:
flowplayer("kzxy_player", "/index/flowplayer/flowplayer-3.2.7.swf",{
clip: {
linkUrl:'#re',
onBegin: function () { this.getPlugin("play").hide(); }
},
plugins: {controls: null}
});
2011/08/29 at 14:38
今天在修改一個(gè)項(xiàng)目,客戶網(wǎng)站用到flowplayer-3.2.7這個(gè)播放器來播放視頻文件,如果格式是flv格式的文件則播放沒有問題,如果格式是swf的文件,播放的時(shí)候就會(huì)出現(xiàn)一個(gè)play again 的按鈕一直在視頻上面,一點(diǎn)擊就會(huì)重新播放,聲音還會(huì)疊加,跑到官網(wǎng)去看手冊(cè),最后想出一個(gè)解決的方案是把按鈕隱藏掉,但是這樣點(diǎn)擊視頻還是會(huì)出現(xiàn)重播,于是我給視頻加了一個(gè)鏈接,如下:
var txt = '<a onclick="return false"; href="<?php echo $mvurl; ?>" '
+ 'style="display:block;width:480px;height:360px;" id="kzxy_player"></a>';
document.write(txt);
flowplayer("kzxy_player", "/index/flowplayer/flowplayer-3.2.7.swf",{
clip: {
linkUrl:'#re',//加一個(gè)無動(dòng)作的鏈接
onBegin: function () { this.getPlugin("play").hide(); } //隱藏按鈕
}
});
2011/08/28 at 15:46
默認(rèn)iframe框架是不能撐開高度的,如果需要讓框架高度自適應(yīng)需要用js實(shí)現(xiàn)
js代碼:
var adjustIframe = function (id) {
var iframe = document.getElementById(id)
var idoc = iframe.contentWindow && iframe.contentWindow.document || iframe.contentDocument;
var callback = function () {
var iheight = Math.max(idoc.body.scrollHeight, idoc.documentElement.scrollHeight); //取得其高
iframe.style.height = iheight + "px";
}
if (iframe.attachEvent) {
iframe.attachEvent("onload", callback);
} else {
iframe.onload = callback
}
}
HTML代碼如下所示:
使用代碼:
window.onload = function(){
adjustIframe("js_sub_web");
}
標(biāo)簽:
iframe,
js