2013年12月30日 星期一

yii framework - 實用小技巧 (不定期更新)

1. 想用php的時間函式 (date、time...)卻發生時間抓不準嗎?

把config/main.php加上這行

'timeZone' => 'Asia/Taipei',

就可以嘍!

2. 查詢資料庫可以分為查(回傳) 一筆或是全部資料, 可用的方式如下:

find() //查找指定條件的單個活動記錄。
findByAttributes() //查找具有指定屬性值的單個活動記錄。
findByPk() //查找指定主鍵的單一活動記錄。
findBySql() //查找指定SQL語句的單個活動記錄。

findAll() //查找滿足指定條件的所有活動記錄。
findAllByAttributes() //查找具有指定屬性值的所有活動記錄。
findAllByPk() //查找指定主鍵的所有活動記錄。
findAllBySql() //查找指定SQL語句的所有活動記錄。

2013年12月24日 星期二

yii framework - 查詢資料大解密之"CDbCriteria到底是什麼"? (說明compare跟addCondition的差別)

先看看官方對CDbCriteria的解釋:

CDbCriteria represents a query criteria, such as conditions, ordering by, limit/offset. 

意思是

CDbCriteria代表查詢的條件、排序還有資料取得數目 (筆數)的上下限.

相信如果你爬了很多文會發現一件事, 就是當我們要做 "欄位=$讀取的變數"這樣的條件查詢時, 會出現compareaddCondition, 到底差在哪裡呢? 我們又要選擇哪個呢?

好, 我們來看看兩者的寫法

首先是compare

$target=$_POST['name'];
$criteria = new CDbCriteria;
$criteria->compare('name', $target);
$rawdb=某models的名字::model()->findAll($criteria);

再來是addCondition:

2013年12月19日 星期四

yii framework - 怎樣才能一次搜尋就抓兩張資料表的欄位? (逐步教學) [下]

再貼一次上集的資料表:

假設有order、store兩張表, 欄位如下

order (客人點餐紀錄)
storeId, name, food, feel

store (店家資料)
storeId, storeName, storeAdd, storePhone

好, 今天我們是這個平台的管理者, 而有許多店家加入這個平台, 我們這次要實作的是撈出
1. 指定的店家 (storeName)
2. 他們的點餐紀錄 (name, food, feel)

前些日子小弟我官網的資料看了又看、試了又試就是頻頻失敗 (挫折感很大),
官網把一般的AR (Active Record) 跟 RAR (Relational Active Record) 分開講, 讓我要混合運用的時候各種撞牆阿~ (一樣建議文中的連結都可以去好好了解一下, 對之後自己在思考上會蠻有幫助的)

2013年12月18日 星期三

yii framework - 怎樣才能一次搜尋就抓兩張資料表的欄位? (逐步教學) [上]

假設有order、store兩張表, 欄位如下

order (客人點餐紀錄)
storeId, name, food, feel

store (店家資料)
storeId, storeName, storeAdd, storePhone

他們之間的關係是
一個店家會有多筆點餐紀錄 <- 搞清楚關係是很重要的唷

這時候我們已經知道要有哪個資料表要有那些欄位了, 也知道他們之間的關係了
接著我們就要建立起他們之間的關係-relations, relations這個關鍵字很重要

接著我們參考一下官方的說明: 如何建立資料表之間的關聯?

(強烈建議好好看過官方的說明再使用等一下我說的快速方法)

2013年11月17日 星期日

yii framework - filter實作的方式 (附帶觀念釐清)

相信很多朋友在學習yii 的過程中對於裡面的一些function實際上要如何運用有很大的疑問, 其實我也是, 剛在爬文的時候意外在對岸 HilaiHiqu的部落格 找到這篇好文, 翻譯後轉載內容如下:


今天幫群裡的朋友看filter,才發現原來Yii裡有這麼強大的東西。廢話不多說,在咱們的controller裡加入自己的filter吧。

public function filters()
{
return array(
'accessControl',// perform access control for CRUD operations
'testFilter + list, show',
);
}

public function FilterTestFilter($filterChain){
echo"begin";
$filterChain->run();
echo"end";
}

2013年10月17日 星期四

yii framework - shell指令時出現Error: index.php does not exist or is not an entry script file.

你會在你的專案底下的protected資料夾發現有個yiic.bat, 但是如果你在windows的命令提示字元輸入

>cd c:\xampp\htdocs\你的專案名稱\protected

接著輸入

>yiic shell

就會出現這句錯誤

>Error: index.php does not exist or is not an entry script file.

解決方法是要輸入

>yiic shell ../index.php

2013年10月15日 星期二

yii framework - 建立一個部落格要建立CRUD時候出錯了?

我想學 官網的部落格範例 一樣嘗試用yii建立一個blog, 但是在建立完model後, 要用
Crud Generator卻出現下面的error:

CDbCommand failed to execute the SQL statement: CDbCommand failed to prepare the SQL statement: SQLSTATE[HY000]: General error: 1 near ".": syntax error. The SQL statement executed was: PRAGMA table_info('tbl_comment'.'tbl_post')

config資料夾裡的main.php的db設定是這樣

'db'=>array(
'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/blog.db',
'tablePrefix'=>'tbl_', //<- 加上這句告訴db我們資料表的前綴字是什麼

),

跟大陸的教學一樣但是還是不行, 為什麼會這樣呢?


2013年10月10日 星期四

yii framework - No input file specified 解決方法(正解)

1. 將server根目錄的php5.ini (沒有就建立一個)裡加上這句

cgi.fix_pathinfo = 1


2. 修改protected資料夾下的.htaccess, 把內容改成下面這樣 (不要傻傻複製上下的米號ㄟ)

*******************************************

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . /index.php

*******************************************

怎麼學習PHP yii framework ?

我也是網路各種爬文、找資料 (我的習慣是先理解再實作)

找到幾個很棒的網站分享給大家:



http://www.yiiframework.com/doc/api/1.1/  (官網, 查Class-類、Properties-屬性、Methods-方法很好用)

http://www.yiichina.com/api/ (不要打我~ 就是有簡體版的沒錯! 但是上面是1.0版, 目前官方已經出到1.1版了!所以我有時候會中英對照看)

http://www.yiichina.com/topic/4786/ (裡面說這主要是透過開發Windows應用C++、C#工程師的角度幫助Windows 桌面應用或ASP.Net工程師較快的掌握PHP Yii Framework應用程序框架。)

http://www.yiiframework.com/doc/guide/1.1/zh_cn/index (官方的簡體指南, 試著跟著一步一步走還不錯, 至少能有個基本概念)