thinkphp5的模型中使用关联

来源:互联网 发布:美容连锁软件 编辑:程序博客网 时间:2024/06/05 00:12

有以下两个表

artitcle表(表示文章)



article的主键是id,外键是cateid,cateid对应于cate表的主键id。


cate表(表示栏目)



cate表的主键是id。


这两张表表示,每一篇文章属于一个栏目,每一个栏目有很多篇文章。


然后编写model类

article的model类:

class Article extends Model{// 设置完整数据表(包含前缀名),不含前缀用$name// 这里用了LoginModel类名,而不是Login名,如果和控制器名一样,并且和数据库名一样即可不用指定数据库表名protected $name='article';public function cate(){return $this->belongsTo("cate", "cateid", "id", ['article'=>'a', 'cate'=>'c'], 'LEFT');}}



cate的model类:

class Cate extends Model{// 设置完整数据表(包含前缀名),不含前缀用$name// 这里用了LoginModel类名,而不是Login名,如果和控制器名一样,并且和数据库名一样即可不用指定数据库表名protected $name='cate';public function article(){//hasMany('关联模型名','外键名','主键名',['模型别名定义']);//hasMany('关联模型名','cate的外键名','cate的主键名',['模型别名定义']);//cate的主键是id,article的外键是cateid,关联cate的id主键,article的外键是cateidreturn $this->hasMany("article", "id", "id");}}

article的控制器类对model进行调用

class Article extends BaseControler{    public function lst()    {        $artres = ArticleModel::with("cate")->paginate(3);    $this->assign('artres', $artres);        return $this->fetch();    }} 


最后在article的模板中调用变量(注意:由于model返回来的是对象数组,不是数据的二维数组,所以在html中调用是->而不是. 。


<td>{$vo->id}</td><td>{$vo->title}</td><td>{if condition="$vo->pic neq '' "}        <img height="50px" src="__PUBLIC__/uploads/{$vo.pic}">{else /}    无缩略图{/if}</td>                         <td>{$vo->click}</td><td>{$vo->time|date="Y-m-d",###}</td>  <td>{$vo->cate->catename}</td>


注意上面对cate表中catename的调用方式,如果写成{$vo.cate.catename}则会出错。

 

原创粉丝点击