天天看点

基于laravel开发的多用户博客系统(三)

本篇主要介绍开发过程中的小结和关键代码:

小结:由于对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;