模型

模型是什么?

每當需要取回、操縱或刪除資料時,應始終藉由模型來完成。模型是一些类型資料與變更它們的方法的代表。 例如:你不会把 SQL 查詢放在一个控制器,这些查詢被放在模型裡,且控制器会在呼叫模型後执行它們。 如此一來,如果你的資料庫改變,你将只要變更後面作用的模型,而不需要變更你所有的控制器。

模型如何使用?

在 Fuel 裡,模型就像任何其他的 类別 一樣。它們做的也不比函式庫多, 但模組前綴幫助它與其他类別做區別。要用模型做一些有用的事情,你将需要使用其他类別。

建立模型


namespace Model;

class Welcome extends \Model {

    public static function get_results()
    {
        // 資料庫互动
    }

}

在命名空間外,記得前綴一个反斜線到你正在使用的來自全域的类別。 如果你不明白为什么,在 PHP.net 閱讀關於命名空間。

存取模型

PHP 有 use 關鍵字用來導入类別到目前命名空間, 这能让你在一个指定类別的档案內:把 Model 的名稱從 Model\Welcome 縮短到只有 Welcome


use \Model\Welcome;

class Controller_Welcome extends Controller
{
    public function action_index()
    {
        $results = Welcome::get_results();
    }
}   

撰寫你自己的模型

雖然模型可被用於任何类型的資料儲存,我們将著重於與 SQL 的使用,因为那是最常見的用法。 幾乎你的模型都至少会有所有的 CRUD 方法:建立、讀取、更新、刪除(或这些的變化)。在 Fuel 裡你的模型預設不需要擴充任何東西, 當然你可以建立你自己的基础模型或使用 Fuel 的 Orm 套件

撰寫 SQL 查詢

你可以使用 DB 类別建立像这樣的原生 SQL:

DB::query('SELECT * FROM users WHERE id = 5');

使用查詢建立器

當談到轉義資料,與在陣列中的資料協作或使应用程序移植到多个資料庫引擎, 你会发现原生 SQL 相當麻煩。使用 DB 类別中的 Query Builder 方法,你可以抽象撰寫原生 SQL:

DB::select('title','content')->from('articles')->execute()->get('title');

DB 类別 文件了解更多關於原生 SQL 查詢和使用 Query Builder。

使用 Model_Crud 建立模型

一个建立模型可能的方式是藉由使用 Model_Crud,添加一个常用功能到你的模型來與資料庫表互动。下面有一个使用的範例。

// 尋找所有文章
$entry = Model_Article::find_all();

// 從種类 1 以日期降序排列尋找所有文章
$entry = Model_Article::find(array(
    'where' => array('category_id', 1),
    'order_by' => array('date' => 'desc')
));

使用 Orm 建立模型

對於具有更多功能的模型,像支援關聯,你可以使用 Orm 套件,其中增加了很多開箱即用的功能到你的模型。下面有一个使用的範例。

// 尋找所有文章
$entry = Model_Article::find('all');

// 從種类 1 以日期降序排列尋找所有文章
$entry = Model_Article::find('all', array(
    'where' => array('category_id', 1),
    'order_by' => array('date', 'desc')
));

Model_Crud 和 ORM 套件使用类似的語法,一旦你需要比 Model_Crud 可提供更多的功能時,这使它能简单的迁移。