CakePHP之Model
模型
模型在應用程序中是作為業(yè)務層而存在的(怎么感覺是數(shù)據(jù)層。。。。。。)。這就意味著,模型應當負責管理幾乎所有涉及數(shù)據(jù)的事情,其合法性,以及你的業(yè)務領域中數(shù)據(jù)在工作流程中的演化和互動 。
通常模型類用來表示數(shù)據(jù),并且在 CakePHP 應用程序中用來訪問數(shù)據(jù),具體說,模型代表數(shù)據(jù)庫中的表,但不限于此,也可以訪問任何操控數(shù)據(jù)的東西,比如文件,外部網(wǎng)絡服務,iCal 日程,或者 CSV 文件中的行。
一個模型可以與其他模型關聯(lián)。例如,一份菜譜可以和菜譜的作者關聯(lián),也可以和菜譜的原料相關聯(lián)。
本章中我們將解釋模型的哪些特性可以自動化,如何改變這些特性,以及模型有哪些方法和屬性。
我們會解釋關聯(lián)數(shù)據(jù)的各種方式。我們還將描述如何查找,保存和刪除數(shù)據(jù)。
最后,我們來看一下數(shù)據(jù)源(Datasource)。
理解模型
模型代表你的數(shù)據(jù)模型。在面向對象編程中數(shù)據(jù)模型是表示一件”事物”的對象,比如,一輛汽車,一個人,或者一所房子。
例如,一個博客可以有多篇文章, 每篇文章又可以有多條評論。博客,文章和評論就是彼此關聯(lián)的模型的例子。
這里有一個 CakePHP 模型定義的簡單例子:
1 App::uses('AppModel', 'Model'); 2 class Ingredient extends AppModel { 3 public $name = 'Ingredient'; 4 }?
僅需這樣簡單的聲明,Ingredient 模型就具備了所有用來生成查詢以及保存和刪除數(shù)據(jù)的功能。這些魔術般的方法來自 CakePHP 的 Model 類,得益于繼承的魔法。
Ingredient 模型擴展了應用程序模型AppModel,而 AppModel 又擴展了 CakePHP 內(nèi)部的 Model 類。就是這個核心的 Model 類賦予你的 Ingredient 模型這些功能的。App::uses('AppModel',?'Model')?保證模型在每次使用時都延遲加載(當加載對象時,返回代理對象,等到真正用到對象的內(nèi)容時才發(fā)出sql語句)了。
這個中間的類 AppModel 是空的。如果你沒有自己創(chuàng)建,則會從 CakePHP 內(nèi)核文件夾中取得。重載AppModel,你就可以定義你的應用程序中所有的模型都具備的功能。
為此,你需要在 Model 文件夾中創(chuàng)建自己的?AppModel.php,就象你的應用程序中所有其他的模型一樣。
回到我們的 Ingredient 模型,在?/app/Model/?目錄中創(chuàng)建一個 PHP 文件。
按照慣例,文件名應該和類名一樣; 在本例中就是``Ingredient.php``。
如果 CakePHP 在 /app/Model 目錄中無法找到對應的文件,它就會為你動態(tài)創(chuàng)建一個模型對象。這也意味著,如果你的模型文件命名不正確(比如 ingredient.php 或者 Ingredients.php), CakePHP 就會使用 AppModel 的實例,而不是你的找不到的(從 CakePHP 的角度來看)模型文件。如果你試圖使用在你的模型中定義的方法,或者你的模型上附加的行為,然而你得到的卻是關于你調(diào)用的方法的名稱的 SQL 錯誤——這明顯是因為 CakePHP 無法找到你的模型,那么你要檢查文件名、應用程序緩存,或者兩者都要檢查。
某些類名是無法作為模型名稱的。例如,”File” 無法使用,因為 “File” 是 CakePHP 內(nèi)核中已經(jīng)存在的一個類了。
模型定義了之后,就可以在?控制器?中使用了。如果模型名稱與控制器名稱匹配,CakePHP 就會自動使該模型可以訪問。
例如,一個叫 IngredientsController 的控制器會自動初始化 Ingredient 模型,并把它附加在控制器上,作為?$this->Ingredient:
1 class IngredientsController extends AppController { 2 public function index() { 3 //獲得所有原料并把它傳給視圖: 4 $ingredients = $this->Ingredient->find('all'); 5 $this->set('ingredients', $ingredients); 6 } 7 }?
關聯(lián)的模型可以從主模型訪問到。在下例中,Recipe 與 Ingredient 有關聯(lián):
1 class Recipe extends AppModel { 2 3 public function steakRecipes() { 4 $ingredient = $this->Ingredient->findByName('Steak'); 5 return $this->findAllByMainIngredient($ingredient['Ingredient']['id']); 6 } 7 }這里展示了如何使用已經(jīng)關聯(lián)在一起的模型。
轉載于:https://www.cnblogs.com/victorruan/p/3564065.html
總結
以上是生活随笔為你收集整理的CakePHP之Model的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蟑螂怎么灭绝?
- 下一篇: 蟑螂能被热水烫死吗?