本篇主要介绍开发过程中的小结和关键代码:
小结:由于对laravel不熟,开发过程中遇到问题,百度基本上没有答案,没有办法只好找文档解决,开发过程中有些规范不是很到位,比如模板页@yield('main');等模板继承之类的没有使用,【习惯了zencoding生成】,php atisan migrate 命令生成表单也用的少,表单大部分是手动创建的,第三方插件用的也不多,太乱了,可能还没有体会到laravel的精妙之处吧,以后慢慢适应。
部分代码:
计算博客日期:
/**
* @日期计算函数
*/
private function formatTime($time){
$t=time()-strtotime($time);
if($t<0){
return false;
}
switch ($t){
case $t<60:return $t.'秒前';break;
case $t>=60 && $t<3600:return floor($t/60).'分钟前';break;
case $t>=3600 && $t<86400:return floor($t/3600).'小时前';break;
case $t>=86400 && $t<604800:return floor($t/86400).'天前';break;
case $t>=604800 && $t<2419200:return floor($t/604800).'周前';break;
case $t>=2419200 && $t<29030400:return floor($t/2419200).'月前';break;
case $t>=29030400:return floor($t/29030400).'年前';break;
default:return '刚刚';
}
}
使用日期格式函数
//获取博客创建时间
$age=$user[0]->created_at;
$age=$this->formatTime($age);
日期归档统计:【统计按年月日期如201501,统计该日期下的文章数】
//按日期归档
$date=Article::select(DB::raw("DATE_FORMAT(created_at,'%Y%m') as time,count( DATE_FORMAT(created_at,'%Y%m')) as num"))->where('uid',$uid)->where('status',1)->groupBy('time')->orderBy('created_at','desc')->get();
文章分页:
//查找用户当前分类下的文章列表,分页显示
$articles=Article::where('cid',$cid)->where('uid',$uid)->where('status',1)->paginate(2);
用户博客首页:
/*
* @用户博客首页
*/
public function user($username){
$uname=strip_tags(trim($username));
//get每次取多条数据,想取多条用take(n)->get();
$user=User::whereRaw('username =?',array($uname))->take(0)->get();
// $user=User::where('username',$uname)->take(0)->get();这种写法也可以
//检查用户是否存在
if(count($user)==0){
return Response::make('user not exist',404);
}
$uid= $user[0]->id;
//获取当前用户的全部文章列表,分页显示
$articles=Article::where('uid',$uid)->where('status',1)->paginate(5);
//获取文章标签列表[通过uid查找]
$tags=Tag::where('uid',$uid)->groupBy('tag')->get();
//获取当前用户文章的总数
$total=Article::where('uid',$uid)->where('status',1)->count();
//获取当前用户分类总数
$cates= User::find($uid)->getCate;//关联模型获取cate
//获取博客创建时间
$age=$user[0]->created_at;
$age=$this->formatTime($age);
//按日期归档
$date=Article::select(DB::raw("DATE_FORMAT(created_at,'%Y%m') as time,count( DATE_FORMAT(created_at,'%Y%m')) as num"))->where('uid',$uid)->where('status',1)->groupBy('time')->orderBy('created_at','desc')->get();
return View::make('blog.user', compact('articles'))->with('tags',$tags)->with('user',$user[0])->with('count',count($articles))->with('total',$total)
->with('cates',$cates)->with('age',$age)->with('date',$date);
}
关联模型使用:
比如文章和文章分类是hasOne的关系,文章和文章下的标签是hasMany的关系:
关联模型需要在model中声明,使用的时候以实例化对象的属性的方式获取:
下面是Article的关联模型定义:
use Illuminate\Database;
class Article extends Eloquent{
protected $fillable = array('title', 'text','author','brief','uid','cid','status');
public function getCate(){
return $this->hasOne('Cate','id','cid');//cate表的id=articles表的cid
}
public function getTags(){
return $this->hasMany('Tag','aid','id');//tags表中的aid=articles表的id
}
}
使用关联模型:
$article=Article::find($id);
//获取当前文章的分类,和所属标签
$cate=$article->getCate;
//获取当前文章所属的标签
$tags=$article->getTags;