yii框架之增删改查(一)

在工作室原有项目的基础上,新增一个news板块进行练习PHP最基本的增删改查。

目录:

一、新建数据库

二、连接数据库

三、定义 AR 类(创建model)

四、控制器(contoller)

五、增删改查方法

1.查找全部信息

2.通过id查找信息

3.删除新闻

4.增加新闻

5.修改新闻

一、新建一个数据库(或者利用原有数据库)

我新建了一个数据库,名为db_new。新建名为t_news的表。包含五个属性。

二、连接数据库

打开main.php , 具体目录如下:

修改本地数据库代码,将数据库名跟用户名、密码该为自己数据库对应的。

    //本地的数据库
        'db'=>array(
            'connectionString' => 'mysql:host=127.0.0.1;dbname=db_new', //mysql:host=125.222.222.73 本地数据库
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => 'root',
            'charset' => 'utf8',
            'tablePrefix' =>'t_',
        ),

 

 

三、定义 AR 类(创建model)

 

 

要访问一个数据表,我们首先需要通过集成 CActiveRecord 定义一个 AR 类。每个 AR 类代表一个单独的数据表,一个 AR 实例则代表那个表中的一行。

在此目录下。新建PHP文件,继承CActiveRecord。

主要写两个方法,只需将第二个方法(tableName())中的return 该为自己数据库中表的名字,我的是news。

class News extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
    
    public function tableName()
    {
        return '{{news}}';   //return 't_news'
    }

}

 

注:默认情况下,AR 类的名字和数据表的名字相同。如果不同,请覆盖 tableName() 方法。

 

  引入的 表前缀功能 AR类的 tableName() 方法可以通过如下方式覆盖

public function tableName(){
return '{{news}}'; //return 't_news'; 表的名字
}

这就是说,我们将返回通过双大括号括起来的没有前缀的表名,而不是完整的表的名字。

四、控制器(Controller)

在controller文件夹下新建一个文件夹,命名为news。在news中新建一个名为 NewsController的controller,并继承Controller。

class NewsController extends Controller
{ ***********
}

 

五、编写增删改查方法

 

因为工作室项目的html文件都在这个目录下,因此我们在这个目录下,新建一个名为news的文件夹,我们的html就放在该文件夹下。

 

1.查找全部信息

(1)news下新建html文件,名为list_news.html

(2)在controller中写查看全部新闻的方法。在controller中的方法名要加action,可以自动识别。

/**
* 全部新闻
*/
public function actionGetNews(){
$list = News::model()->findAll(); //将t_news表中全部信息存到 $list中
$this->smarty->assign('list',$list);
$this->smarty->display('news/list_news.html');//跳到对应的html页面,内容展示
// var_dump($list);
}

对应list_news.html的代码

<table border="1" style="margin-top: 10px;font-size: x-large">
<thead> <tr> <th>标题</th>
<th>操作</th>
<th>内容</th> <th>时间</th> </tr>
<tr>
</thead> <tbody> <{foreach from=$list item=news}>
<td><{$news.date}></td>
<td><{$news.title}></td> <td><{$news.writer}></td> <td>
<a href="<{$website}>/news/News/getDeleteNews?id=<{$news.id}>">删除</a>
<a href="<{$website}>/news/News/getNewsById?id=<{$news.id}>">查看详情</a> <a href="<{$website}>/news/News/toUpdateNews?id=<{$news.id}>">修改</a>
<a href="<{$website}>/news/News/toAddNews">添加</a>
</td> </tr> <{/foreach}> <tr> <td colspan="4" style="text-align: center" > </td> </tr> </tbody>
</table>

 

简单展示如下图所示:

 

2.通过id查找信息

点击新闻页面的查看详情,可查看新闻的全部内容。

  <a href="<{$website}>/news/News/getNewsById?id=<{$news.id}>">查看详情</a>

对应controlle中的方法:

   /**
     * 通过id查找一条新闻
     */
    public function  actionGetNewsById(){
        $id=$_GET['id'];
        $news=News::model()->find('id=:id',array(':id'=>$id));
        $this->smarty->assign('news',$news);
        $this->smarty->display('news/concrete_content.html');
    }

 

将新闻的详细信息,在concrete_content.html中进行展示。

 

<center>
    <h1 style="margin-top: 80px"><{$news.title}></h1>
    <table border="1" style="width: 1000px;margin-top: 10px;font-size:x-large">
        <tr>
            <td>内容</td>
            <td><{$news.content}></td>
        </tr>
        <tr>
            <td>作者</td>
            <td><{$news.writer}></td>
        </tr>
        <tr>
            <td>时间</td>
            <td><{$news.date}></td>
        </tr>
    </table>
</center>

 

简单页面展示如下:

 

3.删除新闻

<a href="<{$website}>/news/News/getDeleteNews?id=<{$news.id}>">删除</a>

将对应新闻的id传到controller,删除对应的新闻,调用查看全部新闻方法,返回到展示新闻页面。

 /**
     * 删除新闻
     */
    public function  actionGetDeleteNews()
    {
        $id=$_GET['id'];
        $news=News::model()->findByPk($id);
        $news->delete();                    // 从数据表中删除此行
        $this->redirect(array(getNews));
    }

 

4.增加新闻

 

<a href="<{$website}>/news/News/toAddNews">添加</a>

通过controller中的方法,跳转到增加新闻页面。

/**
* 跳转到增加新闻
*/
public function actionToAddNews(){
$this->smarty->display('news/add_news.html');
}

 

增加新闻html

 

<form action="<{$website}>/news/News/addNews2" method="post">
    <table style="margin-top: 10px;font-size: x-large" >
        <tr>
            <td>标题名称:</td>
            <td><input type="text" name="title" style="width: 500px;height: 30px"></td>
        </tr>
        <tr>
            <td>文章内容:</td>
            <td><textarea name="content" cols="30" rows="10" style="width: 500px;"></textarea></td>
        </tr>
        <tr>
            <td>文章作者:</td>
            <td><input type="text" name="writer" style="width: 500px;height: 30px"></td>
        </tr>
        <tr content="center">
            <td  colspan="2" style="text-align: center"><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>

 

将添加的内容通过form表单,传给controller,增加新闻。

/**
* 增加新闻
*/
public function actionAddNews2(){
$news=new News;
$content=$_POST['content'];
$title=$_POST['title'];
$writer=$_POST['writer'];
$news->title=$title;
$news->content=$content; 
$news->writer=$writer;
$news->save();
$this->redirect(array(getNews));
// var_dump($news);
}

 

 

简单页面展示:

5.修改新闻

<a href="<{$website}>/news/News/toUpdateNews?id=<{$news.id}>">修改</a>

将要修改的新闻的id传给controller,将id对应的新闻在页面呈现出来,进行修改。

    /**
     * 跳转到更新新闻
     */
    public function actionToUpdateNews(){
        $id=$_GET['id'];
        $news=News::model()->find('id=:id',array(':id'=>$id));
        $this->smarty->assign('news',$news);
        $this->smarty->display('news/update_news.html');
    }

修改新闻页面:

<form action="<{$website}>/news/News/getUpdateNews" method="post">
<table border="1" style="margin-top: 100px;margin-left: 100px">
    <tr >
        <input type="text" name="id" value="<{$news.id}>" hidden/>
    </tr>
    <tr>
        <td>标题</td>
        <td>
            <textarea  type="text" name="title" style="width: 1000px"><{$news.title}></textarea>
        </td>
    </tr>
    <tr>
        <td>内容</td>
        <td>
            <textarea  type="text" name="content" style="width: 1000px"><{$news.content}></textarea>
        </td>
    </tr>
    <tr>
        <td>作者</td>
        <td>
             <textarea  type="text" name="writer" style="width: 1000px"><{$news.writer}></textarea>
        </td>
    </tr>
     <tr>
         <td colspan="<input type="submit" name="submit" value="</td>
     </tr>
</table>
</form>

将要修改的信息通过form表单,传给controller,修改新闻。

    /**
     * 修改新闻
     */
    public function actionGetUpdateNews(){
        $id=$_POST['id'];
        $news=News::model()->find('id=:id',array(':id'=>$id));
        $news->title=$_POST['title'];
        $news->content=$_POST['content'];
        $news->writer=$_POST['writer'];
        $news->save(); // 将更改保存到数据库
        $this->redirect(array(getNews));
    }

简单页面展示:

 

 

Yii 权威指南(使用数据库)http://www.yiichina.com/doc/guide/1.1/database.ar

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页