有以下两个表
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');
- }
- }
- class Cate extends Model
- {
- // 设置完整数据表(包含前缀名),不含前缀用$name
- // 这里用了LoginModel类名,而不是Login名,如果和控制器名一样,并且和数据库名一样即可不用指定数据库表名
- protected $name='cate';
- public function article()
- {
- //hasMany('关联模型名','外键名','主键名',['模型别名定义']);
- //hasMany('关联模型名','cate的外键名','cate的主键名',['模型别名定义']);
- //cate的主键是id,article的外键是cateid,关联cate的id主键,article的外键是cateid
- return $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}则会出错。