本篇主要介紹開發過程中的小結和關鍵代碼:
小結:由于對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;