模型 - 一般
模型是什幺?
每当需要取回、操纵或删除资料时,应始终藉由模型来完成。模型是一些类型资料与变更它们的方法的代表。 例如:你不会把 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 可提供更多的功能时,这使它能简单的迁移。