下面給大家介紹ThinkPHP 的join關(guān)聯(lián)查詢不使用默認(rèn)的表前綴,希望對(duì)需要的朋友有所幫助!
ThinkPHP 的join關(guān)聯(lián)查詢不使用默認(rèn)的表前綴
關(guān)于ThinkPHP 的關(guān)聯(lián)查詢,官方文檔是這樣描述的:
上述join函數(shù)中需要三個(gè)參數(shù),分別是:
join
要關(guān)聯(lián)的(完整)表名以及別名,支持三種寫法:
寫法1:[ '完整表名或者子查詢'=>'別名' ]
寫法2:'完整表名 別名'
寫法3:'不帶數(shù)據(jù)表前綴的表名'
condition
關(guān)聯(lián)條件,可以為字符串或數(shù)組, 為數(shù)組時(shí)每一個(gè)元素都是一個(gè)關(guān)聯(lián)條件。
type
關(guān)聯(lián)類型,可以為: INNER、LEFT、RIGHT、FULL,不區(qū)分大小寫,默認(rèn)為INNER。
不同前綴
一般情況下,都是一個(gè)數(shù)據(jù)庫(kù)中查詢的,這樣的情況下默認(rèn)使用的都是相同的表前綴,比如(shop_),所以在使用數(shù)據(jù)庫(kù)模型關(guān)聯(lián)查詢時(shí)往往都是這樣寫的:
Order::alias('o') ->join('user u', 'o.user_id = u.id') ->select();
在以上代碼中,因?yàn)槭鞘褂媚P筒樵儯阅J(rèn)都會(huì)加上表前綴,兩張表的完整表名就是shop_order和shop_user,而關(guān)聯(lián)類型則默認(rèn)為INNER關(guān)聯(lián)。
但這時(shí)如果關(guān)聯(lián)了一張不同前綴的表(比如:pay_record),上述的查詢語(yǔ)句顯然就行不通了,這時(shí)就需要在關(guān)聯(lián)語(yǔ)句處稍作修改,修改后的代碼如下:
Order::alias('o') ->join(['pay_record' => 'r'], 'o.pay_id = r.id') ->select();
這樣便能使用模型關(guān)聯(lián)不同前綴的表進(jìn)行查詢了。
總結(jié)
上述的方式其實(shí)也就是把join函數(shù)中的join參數(shù)由字符串修改為數(shù)組;ThinkPHP是一個(gè)很優(yōu)秀的開(kāi)發(fā)框架,上述的關(guān)聯(lián)方式也只是其中一種,更多方式可以查閱官方手冊(cè):ThinkPHP官方手冊(cè)。