【威尼斯手机平台】//使用news这么些模型function index(卡塔尔{,以至查看数据库中二个item的专门的学业views
分类:威尼斯手机平台

基本的安顿:数据库设置 小编这里运用的是数据库newsapache : rewrite module 展开 小编那边是设置好一个设想主机指向到,即使是设想目录格局,查六柱预测关文书档案。

第五章 Scaffolding (脚手架?)

新建news表 里面包车型地铁字段 id,title,content,time,sort

Scaffolding是三个很棒的路径,使得前期开荒的一部分web应用能够运转起来。初期的数据库形式是不安静的,十分轻松变化。Scaffolding有个下落趋向:web技师愤恨创造今后大概根本用不到的forms。为了收缩技术员的这种重复劳动, Cake中蕴藏了Scaffolding。Scaffolding解析数据库,创制一些专门的工作的施用add、delete、和edit开关的lists,创制输入的forms,以至查看数据库中叁个item的行业内部views。为了在程序中的controller中加多Scaffolding,需求增加$scaffold变量:

因为自然要操作news那么些表,所以先创制news的model/app/models/news.php

 注意save操作是何许放置在三个尺度语句中:如果您希图保存数据到model中,cake自动尝试确数据科学(依照你提供的平整)。能够查阅第十章掌握愈来愈多关于科学准绳(validation).要是不想查看正确性直接保存数据,使用save($data,false卡塔尔(قطر‎;

?class news extends AppModel{var $name=''news''; }?

 

假诺未有var $name=''news'';这一行 模型会默以为要管理的表是newss(个人预计,没试过卡塔尔国是那几个天性来标志应用的数据库 var $useTable=''users''; $name 只是标志model 的name 属性$table 估计是在拍卖model之间关系的时候利用的啊? 保存此疑心然后新建/app/controllers/news_controller.php?class newsController extends AppController{var $uses=array(''news''卡塔尔国; //使用news那么些模型function index(卡塔尔{ $this-set(''lists'',$this-news-findAll(State of Qatar卡塔尔国} //暗许function add($id=0卡塔尔国{ if($idState of Qatar{ $this-set(''id'',$idState of Qatar; $this-news-id=$id; } if(!empty($this-data)){ $ret=$this-news-save($this-data[''news'']卡塔尔; if($ret卡塔尔(قطر‎{ if($id卡塔尔国 $this-flash(''更新成功'',''/news/''卡塔尔国; else $this-flash(''增多立业成家'',''/news/''卡塔尔; }else{ if($id卡塔尔国$this-flash(''更新失利'',''/news/add/''.$id卡塔尔国; else $this-flash(''增多失利'',''/news/add''卡塔尔(قطر‎; } } exit(卡塔尔(قطر‎;} //增多/匡正function delete($idState of Qatar{ $this-news-id=$id; $ret=$this-news-remove(卡塔尔国; if($ret卡塔尔(قطر‎ $this-flash(''删除成功'',

    别的有效的保留方法:

●savaFieldId($name,$value)

    ○保存三个单田野(fieldState of Qatar的值

●getLastInsertID()

○重回这两天开创记录的ID

 

1.4 Model的Callbacks

    在我们好像0.10.x最后版的时候,大家增加了一些model的回调函数,允许客户能够逻辑上背后的在model操作前或操作后实践。为了在应用中收获这种措施,在model中利用提供的参数,重载上面包车型大巴这几个情势

●beforeFind($conditions)

○这些回调函数在三个询问操作起来之前试行。将查询前的操作逻辑放到那个办法里面。当您在model中重写(override)那么些点羊时,当你想要find操作实行时候回来true,当您想要施行中止时候回来false

●afterFind($results)

○使用这些回调函数能够改进从find操作中回到的结果,只怕达成别的任何的find后逻辑。这么些函数的参数是model的find操作的结果,重返的是改良后的结果。

●beforeSave()

○在这里个函数中放置任何保存前的逻辑。假使您像保存操作奉行则赶回true,不然再次回到false

●afterSave()

    ○放置任何你想要在保存后施行的代码在这里个回调函数中

●beforeDelete()

    ○放置删除前的逻辑代码。想要删除操作推行则赶回true,不然再次回到false

●afterDelete()

    ○放置任何你想要在剔除后施行的代码在这里个回调函数中

 

2. Model 变量

    当您创立你的models时候,你能够安装有个别家乡风味的变量,来赢得对Cake函数的应用。

●$primaryKey

○假设那么些model关联到贰个数据库的table,并且数据库的主键并非id,那么使用那几个变量来报告Cake主键的名字

●$transactional

○告诉Cake该model是不是辅助传输(举个例子begin/commit/rolback),设置为boolea值。

●$useTable

○假如你想使用的数据库的table并非model名的复数形式,并且你也不想订正table名,设置这几个变量为table名

●$validate

    ○确认传递给model的多少是不是科学的贰个数组。查看第十章

●$useDbConfig

○还记得数据库设置中,你能够在/app/config/database.php文件中设置么?使用那么些变量能够换到他们  

class CategoriesController extends AppController
{
    var $scaffold;
}

有关Scaffold,要在乎一个根本的难点: Scaffold期望每一个以_id结尾的filed name是贰个外键并且针对多个table,table的名称和_id前方的完全一样(只可是是小写的)。所以,举个例证来讲,假如您嵌套了归类,你最佳有个列叫做parent_id。在这么些版本中,最佳能(CANON卡塔尔(قطر‎够命名字为parentid.相似,在表中有一个外键(比方,titles table有个category_id),何况你早已卓越的归拢到models(查看6.2明亮联结),在show/edit/newd的views中,选取的表将会和外键的表(category)一齐活动的显现出来(原来的小说:a select box will be automatically populated with the rows from the foreign table (categoryState of Qatar in the show/edit/new views.)。在foreign model中装置$displayField来决定foreign中怎么样田野先生会被出示。继续我们的例证,category有个标题
class Title extends AppModel 
{
    var $displayField = ''title'';
}

第六章 Models

本章内容:

  1. Model Function

       1.1 客商定义的Function

       1.2 检索(retrieving卡塔尔(قطر‎你的数码

       1.3 保存你的数量

       1.4 Model的回调(callbacks)

  1. Model的变量

  2. Associations

 

Model是何等,它是MVC形式中的M

Model做些什么。它使得domain logic和presentation分隔开分离,独立application logic(It separates domain logic from the presentation, isolating application logic.卡塔尔(قطر‎

      

       叁个Model概要的说就是贰个针对数据库的access,更现实,就是数据库中的特定的table。暗中认可的,各样model都利用本身名字复数方式的table,比方,User Mode使用 users

table。Models能够维护数据一定的国有国法,联结新闻以致它接受的table的情势。

 

 

1. Model的方法

       从PHP的观念看,models皆以从AppModel类世襲来的类。类AppModel原始是概念在 /cake目录下。你也能够创制和煦的位于 app/app_model.php.那几个文件应该饱含部分可供八个models共享的方法。AppModel本人也是从Model类世襲而来的,Model类是四个职业的Cake库,定义在 libs/model.php

       注意

       即便本节介绍的是Model中常用的章程,可是记住:更详尽的参照请到

 

1.1 客商定义的方式

       上面是model中叁个特定table的例子,该例子完成了在blog中展示和隐形二种艺术

例6.1  Example Model Functions

<?php
class Post extends AppModel
{
   function hide ($id=null)
   {
      if ($id) $this->setId($id);
      $this->set(''hidden'', ''1'');
      $this->save();
   }
 
   function unhide ($id=null)
   {
      if ($id) $this->setId($id);
      $this->set(''hidden'', ''0'');
      $this->save();
   }
}
?>

1.2 检索数据

下边是利用model取得数码的一些标准措施

●findAll($conditions,$fields,$order,$limit,$page,$recursive)

○再次回到特定的田野(field卡塔尔国s,田野s由$limit(私下认可是50State of Qatar个记录,相称$conditions(借使有State of Qatar,从第$page(暗中认可1卡塔尔国页起初列表,$conditions内容应该像SQL语句中的同样,比方:$conditions=”race = ‘wookie’ AND thermal_detonators>3”

○当$recursive选项设置成1到3的整数,findAll(卡塔尔(قطر‎将会估摸重回在会集到该model中窥见的全部项的models.那项递归寻找能够深深3层。

●find($conditions, $fields, $order, $recursive)

    ○重回相配$conditions的首先条记下的制订的田野(field卡塔尔国s(若无一点点名则赶回全部卡塔尔

    ○$recursive成效同上

●findAllBy<FieldName>($value) and findBy<FieldName>($value)

○那个美妙的点子能够用于钦定特定的田野同志和一定的value火速查找行,你要做的便是把你的田野先生用驼峰表明法加多在前面。比如(用于controller中)

$this->Post->findByTitle(''My First Blog Post'');
$this->Author->findByLastName(''Rogers'');
$this->Property->findAllByState(''AZ'');
$this->Specimen->findAllByKingdom(''Animalia'');

回到的结果是二个数组,和find(卡塔尔(قطر‎以至findAll(卡塔尔(قطر‎重返的结果是叁个情势

●field($name,$conditions,$order)

○依照$order排序,依据条件$conditions,将第一条记下中的田野值,作为string重返

●findCount($conditions)

    ○再次来到相配$conditions的笔录的个数

●generateList

($conditions=null,$order=null,$limit=null,$keyPath=null,$valuePath=null)

    ○依照models的lists,得到一类别key的值,极度是依据model list创设<select>list。$conditions, $order, $limit参数使用方式和地点相仿。$keyPath和$valuePath是您告知model这里去找keys和values来成list。例如,基于Role model,你想生成二个由ids(类型integer卡塔尔(قطر‎充任key,由roles当做value的list,那些艺术调用情势如下:

$this->set(
    ''Roles'',
    $this->Role->generateList(null, ''role_name ASC'', null, ''id'', ''role_name'')
);

//This would return something like:
array(
    ''1'' => ''Account Manager'',
    ''2'' => ''Account Viewer'',
    ''3'' => ''System Manager'',
    ''4'' => ''Site Visitor''
);

●read($fields=null, $id=null)

    ○使用那几个点子自一时装载的笔录或然由$id钦命的记录中获得田野先生s和值

 

 

    特定的Sql调用能够应用model的findBySql(卡塔尔国方法。举个例子,在blog应用中,作者想囤积三个发贴者的first name到多少个table中,可是那么些table实际不是本身的cake schema中的一片段。作者就足以经过这一个model中的叁个特定的点子

 

例6.2 Custom Sql Calls With findBySql()

<?php
class Post extends AppModel
{
        function posterFirstName()
        {
          $ret = $this->findBySql("SELECT first_name FROM posters_table 
                                   WHERE poster_id = 1");
          $firstName = $ret[0][''first_name''];
          return $firstName;
        }
}
?>

本来也是有query(卡塔尔方法,要是实行成功再次来到true,失利重返false。因为query语句实际不是都回到结果集。举个例子“DELETE FROM problems WHERE solved = true”

 

1.3 保存数据

    为了保留你的数额到model中,你应该向model提供您想要保存的多寡。这个多少交到给save(卡塔尔国方法应该以下边包车型地铁花样保留

Array
(
    [modelname] => Array
        (
            [fieldname1] => value
            [fieldname2] => value
        )
)    

从form表单提交(post方法)的数据会自动排列成这种格局,况且放置到controller中的$this->params[‘data’],由此,通过web的form表单保存数据特别轻易。一个controller的编辑方法只怕会像上面那样显示:

function edit($id) 
{
   //Note: The property model is automatically loaded for us at $this->property.     
   // Check to see if we have form data 
   if (isset($this->params[''form''][''data''][''property''])) 
   {  
      // Here''s where we try to save our data
      if ($this->property->save($this->params[''data''])) 
      {
         //Show the user that her data has been saved
         $this->flash(''Your information has been saved.'',            
 ''/properties/edit/''.$this->params[''data''][''property''][''id''], 2);
         exit();
      }
      else
      {
         //If the data couldn''t be validated, show the validation errors
         //and repopulate form fields with submitted data
         $this->set(''form'', $this->params[''data'']);
         $this->validateErrors($this->property);
         $this->render();
      }      
   }   
   //If no form data was submitted, just render the edit view
   $this->render();
}

 

<

本文由威尼斯在线注册平台发布于威尼斯手机平台,转载请注明出处:【威尼斯手机平台】//使用news这么些模型function index(卡塔尔{,以至查看数据库中二个item的专门的学业views

上一篇:它们能获取一些关于系统和文件以及目录的信息 下一篇:php登陆问题[txt保存数据]
猜你喜欢
热门排行
精彩图文