有以下两个表
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的外键是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中调用是->而不是. 。
{$vo->id}{$vo->title}{if condition="$vo->pic neq '' "}
{else /}
无缩略图
{/if}
{$vo->click}{$vo->time|date="Y-m-d",###}{$vo->cate->catename}注意上面对cate表中catename的调用方式,如果写成{$vo.cate.catename}则会出错。