laravel框架少見方法詳解


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()之類的有結果之中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM