2013-01-12 28 views
3

我必須製作一些過濾器,例如獲取某個部門的人員,並且我想知道如何做到這一點。ActiveRecord(CDbCriteria)與QueryBuilder?

其中一些將要求多個表的連接。

有沒有人知道CDbCriteria和查詢生成器之間的主要區別?我特別想知道與數據庫的兼容性。

,我發現這個關於查詢生成器Yii的文檔中:

它提供了一定程度的數據庫抽象,簡化了遷移到不同的數據庫平臺。

對於CDbCriteria對象它是一樣的嗎?好點嗎?

回答

4

當使用Yii的active record(AR)抽象(通常是所有的時間)時,使用CDbCriteria的概念。 AR要求您爲數據庫中的各個表創建models

Query builder訪問數據庫的一種非常不同的方式;實際上它是一個結構化的包裝器,它允許你以編程的方式構造一個SQL查詢,而不是將它寫成一個字符串(作爲額外的好處,它也提供了一定程度的數據庫抽象)。

在典型的應用程序中,幾乎不需要使用查詢生成器,因爲AR已經提供了大量的功能,並且它也提供了相同程度的數據庫抽象。

在某些情況下,你可能想運行一個非常特殊類型的查詢,是不是方便或高性能通過AR發行。然後,您有兩種選擇:

  1. 如果查詢是固定的或幾乎是固定的,那麼你可以簡單地通過DAO發出它;實際上,查詢構建器文檔中提到「如果您的查詢很簡單,那麼直接編寫SQL語句會更容易,更快速」。
  2. 如果查詢需要動態構建,那麼查詢生成器就很適合這項工作。

正如你所看到的,查詢生成器在大多數情況下並不是那麼有用。只有當你想編寫非常自定義的動態構建查詢時,才能使用它。

您提到的示例功能可以並且應該使用AR實現。