知其然已經(jīng)很難了,為什么要知其所以然?王陽(yáng)明的知行合一,或不僅僅為了知行合一而知行合一。做什么,都是為現(xiàn)實(shí)服務(wù)的。行,為了更好的知,而知,為了更好的行。最終目的,當(dāng)然每個(gè)人不一樣,但一定有。
知其所以然,當(dāng)然是更好的知其然。這樣,不管困難再怎么排列組合,也能得心應(yīng)手。萬(wàn)變不離其宗,同樣的道理。
看一段TP5上面的代碼:
$data = DB::name('company')->select();
$data = DB::table('company');
每個(gè)人都有自己的習(xí)慣,有的喜歡用Db::name,有的喜歡用DB::table。也有人,只知道DB::name;當(dāng)然也有人只知道Db::table。
不要感覺(jué)不可思議,我曾是里面的一員,至今記得那個(gè)時(shí)候看到Db::table時(shí)眼睛一亮:還有這樣的?
然后,然后記住了,然后就沒(méi)了……(和別人的差距就在這里)
又過(guò)了好久,想看一下兩個(gè)有什么不同,于是看了一下declaration,一個(gè)鼠標(biāo)點(diǎn)擊的事,一秒鐘的事。有點(diǎn)感覺(jué)了。

查詢(xún)器query對(duì)象
于是,那時(shí)候了解了查詢(xún)器query對(duì)象。
* @method Query name(string $name) static 指定數(shù)據(jù)表(不含前綴)
* @method Query where(mixed $field, string $op = null, mixed $condition = null)
通過(guò)比較這倆哥們返回值,對(duì)鏈?zhǔn)讲樵?xún)有了感覺(jué)。
* @method mixed find(mixed $data = null) static 查詢(xún)單個(gè)記錄
再把這哥們加上去,明白了他們不是同一個(gè)山寨的。不過(guò)是搭伙過(guò)日子。這個(gè)時(shí)候,再去理解在where里面加上閉包,很舒服,很自然。
where里面加上個(gè)閉包
$data = Db::table('banner_item')
->where(function ($query) {
$query->where('id', 'eq', $id);
})
->select();
where里面,是一個(gè)匿名函數(shù)。函數(shù)很熟悉,匿名函數(shù)不過(guò)是少了個(gè)函數(shù)名稱(chēng)。
然后呢?傳過(guò)來(lái)一個(gè)參數(shù),這個(gè)參數(shù)便是query對(duì)象了。有了query對(duì)象,函數(shù)里面的寫(xiě)法便和上面一樣了,想怎么寫(xiě)就怎么寫(xiě)了。我們也知道為什么里面不能鏈上find()或select()了。
最后,便是條件里面如何傳進(jìn)去參數(shù),加上use ($id)
$data = Db::table('banner_item')
->where(function ($query) use ($id){
$query->where('id', 'eq', $id);
})
->select();
如果再加上我們知道,where有三種寫(xiě)法:表達(dá)式法,數(shù)組法,然后閉包法。這樣,對(duì)理解便更深刻了。
會(huì)寫(xiě)代碼是一種技巧,但是透過(guò)現(xiàn)象看本質(zhì),學(xué)其它東西時(shí),會(huì)更好的接受?;蛘咛嵘粋€(gè)檔次,這種思維很最重要。