知其然已經(jīng)很難了甩骏,為什么要知其所以然?王陽明的知行合一先慷,或不僅僅為了知行合一而知行合一饮笛。做什么,都是為現(xiàn)實服務(wù)的论熙。行福青,為了更好的知,而知脓诡,為了更好的行无午。最終目的,當然每個人不一樣祝谚,但一定有宪迟。
知其所以然,當然是更好的知其然交惯。這樣次泽,不管困難再怎么排列組合,也能得心應(yīng)手席爽。萬變不離其宗意荤,同樣的道理。
看一段TP5上面的代碼:
$data = DB::name('company')->select();
$data = DB::table('company');
每個人都有自己的習慣拳昌,有的喜歡用Db::name袭异,有的喜歡用DB::table。也有人炬藤,只知道DB::name御铃;當然也有人只知道Db::table。
不要感覺不可思議沈矿,我曾是里面的一員上真,至今記得那個時候看到Db::table時眼睛一亮:還有這樣的?
然后羹膳,然后記住了睡互,然后就沒了……(和別人的差距就在這里)
又過了好久,想看一下兩個有什么不同陵像,于是看了一下declaration就珠,一個鼠標點擊的事,一秒鐘的事醒颖。有點感覺了妻怎。
查詢器query對象
于是,那時候了解了查詢器query對象泞歉。
* @method Query name(string $name) static 指定數(shù)據(jù)表(不含前綴)
* @method Query where(mixed $field, string $op = null, mixed $condition = null)
通過比較這倆哥們返回值逼侦,對鏈式查詢有了感覺匿辩。
* @method mixed find(mixed $data = null) static 查詢單個記錄
再把這哥們加上去,明白了他們不是同一個山寨的榛丢。不過是搭伙過日子铲球。這個時候,再去理解在where里面加上閉包晰赞,很舒服稼病,很自然。
where里面加上個閉包
$data = Db::table('banner_item')
->where(function ($query) {
$query->where('id', 'eq', $id);
})
->select();
where里面宾肺,是一個匿名函數(shù)溯饵。函數(shù)很熟悉,匿名函數(shù)不過是少了個函數(shù)名稱锨用。
然后呢?傳過來一個參數(shù)隘谣,這個參數(shù)便是query對象了增拥。有了query對象,函數(shù)里面的寫法便和上面一樣了寻歧,想怎么寫就怎么寫了掌栅。我們也知道為什么里面不能鏈上find()或select()了。
最后码泛,便是條件里面如何傳進去參數(shù)猾封,加上use ($id)
$data = Db::table('banner_item')
->where(function ($query) use ($id){
$query->where('id', 'eq', $id);
})
->select();
如果再加上我們知道,where有三種寫法:表達式法噪珊,數(shù)組法晌缘,然后閉包法。這樣痢站,對理解便更深刻了磷箕。
會寫代碼是一種技巧,但是透過現(xiàn)象看本質(zhì)阵难,學其它東西時岳枷,會更好的接受∥亟校或者提升一個檔次空繁,這種思維很最重要。