1.whereDate() 方法
1 $q->where('created_at', '>=', date('Y-m-d').' 00:00:00'));
以前查數據時,直接用where條件來比值判斷,但是格式就會有嚴格的要求,如果上面的代碼 第三個參數 是 date('Y-m-d') 而不加 后面的00:00:00 這樣在數據庫里面就會找不到
而判斷是否相等 也都是對格式嚴格的要求
$q->whereDate('created_at', '=', date('Y-m-d'));
現在用whereDate,laravel自帶的方法,就會自動幫你進行日期格式處理,保證date與搜索的格式是匹配的。
$q->whereDay('created_at', '=', date('d')); $q->whereMonth('created_at', '=', date('m')); $q->whereYear('created_at', '=', date('Y'));
例如上面的代碼,只搜索天數為某值的時候,用whereDay,會去數據庫里搜索某一天與其匹配的值。
2.wherePivot() 方法
一般這個方法的活動場景,模型中
class Company extends \Eloquent{...
public function memberApplies() { return $this->belongsToMany('App\User', 'user_company_applies') ->wherePivot('apply_status', UserCompanyApply::applyVerify) ->wherePivot('type', UserCompanyApply::TYPE_USER); }
wherePivot什么意思?,首先是company和user表,建立多關聯的關系,關聯表是user_company_applies
首先如果不加wherePivot,怎么顯示
數據庫這樣
、
控制器:
顯示3條數據,
也就是從中間表里找company_id為1對應的user_id的數據,在把user_id的值帶到user表里去查詢有哪些數據,也就是這3條,這是原來的多對多的流程
現在加上了wherePivot方法,無非是加上一個判斷條件,獲得多對多的數據之后,再去查找中間表里的apply_status和type字段,查找2個都為1的數據是那條,有則顯示
數據庫現在改成這樣
2個值都為1了,看能不能查詢出 user_id為2525的這條數據
開始測試
OK
3. Carbon 類
Carbon是laravel處理時間類型的一個類。
1. diffForHumans()方法
$article->created_at->diffForHumans();
diffForHumans方法,可以把日期轉換成 “1 hours age”、“4 years age” 這樣的格式,同時,它還支持本地化,可以把其轉換成中文形式的“1小時前”、“4年前”等。
可以在 app/Providers/AppServiceProvider.php
的 boot()
方法中添加下面的代碼來設置全局本地化:
public function boot() { \Carbon\Carbon::setLocale('zh'); }
設置好之后,在輸出時間的地方調用:
$article->created_at->diffForHumans();
輸出的結果會是 查article表里created_at字段的值是多少,在統計現在時間和它相差多少,如果現在時間比值大18分鍾,會顯示 "18 minutes ago" 。
2. diffInDays(), diffInHours(), diffInMinutes()
這幾個方法都是差不多和Carbon一起使用的,例如
public function getCloseSignDayAttribute() { $day = Carbon::now()->diffInDays($this->close_time, false); return $day > 0 ? $day : 0; }
這個方法是在Lession模型中的,diffInDays就是統計,現在的時間和lession表里close_time字段的值之間相差多少時間。相差的時間以天的格式返回,例如數據庫里是2016-10-10 現在時間是 2016-9-10 返回的就是30天
carbon::now就是取當前時間的意思,加個diffInday統計相差時間,第一個參數$this->close_time,是模型中close_time這個字段,模型就是去哪張表找,而這里close_time就從哪個字段找
下面看一下這個模型的$dates屬性,官方文檔有介紹
protected $dates = [ 'start_time', 'close_time', 'created_at', 'updated_at' ];
大體意思dates里面填寫的字段,會自動調整時間。 diffInHours(), diffInMinutes() 方法就跟diffInDays()一個道理了,一個統計和 close_time相差多少小時,相差多少分鍾,使用形式都是一樣,返回值不同
$minute = Carbon::now()->diffInMinutes($this->close_time, false);
$minute返回相差多少分鍾
3. addDay()方法
$less = Lesson::find(22); $r = $less->start_time->addDay(2);
將start_time時間,增加2天,輸出出來。
4.模型類
$arr = DB::table('archives')->where('id',2)->pluck('title');//獲取一條數據的指定字段
$arr = DB::table('archives')->where('id','>',1)->lists('title');//獲取一張表的一列字段
$arr = DB::table('archives')->where('id','>',1)->toSql();//獲取查詢的SQL語句,公用於條件,不能用於get()之類的有結果之中