tp5.1 hasWhere


起因

工作中習慣使用模型關聯查詢數據,因為模型關聯之后返回的數據可以是一對多的數組,使用join鏈表查詢則是返回多條數據,使用模型關聯就少不了對關聯的模型進行查詢

問題及解決

還是上代碼說明

這是一個規格表關聯商品

$sku = ProdSku::with('skuProd')->where([
            ['barcode', '=', $barcode],
            ['prodid', '<>', $prodid]
        ])->find();

如果要對商品屬性進行篩選

$sku = ProdSku::with('skuProd'=>function($q){
      $q->where('status','in',[0,1]); // 對商品狀態進行查找
    })->where([
            ['barcode', '=', $barcode],
            ['prodid', '<>', $prodid]
        ])->find();   

其實還有一種寫法 使用hasWhere 需要注意的是 haswhere只有靜態方法 沒有->

$sku = ProdSku::hasWhere('skuProd',['status'=>1])
            ->where([
            ['barcode', '=', $barcode],
            ['prodid', '<>', $prodid]
        ])->fetchSql(true)->find();

但是對比之后,發現使用haswhere 時 如果where部分是數組, 就只能是 等於 操作,例如狀態等於1

但是我想要的狀態是 在某個范圍內,例如 in

就只能使用閉包

$sku = ProdSku::hasWhere('skuProd',function($q){
            $q->where('status','in',[1,0]);
        })
            ->where([
            ['barcode', '=', $barcode],
            ['prodid', '<>', $prodid]
        ])->fetchSql(true)->find();

一看這種寫法沒問題啊,但是還是會報錯,說是status兩個表都有,不知道是查哪一個

經過嘗試之后發現, 需要在status前面加上它所屬的模型名稱

$sku = ProdSku::hasWhere('skuProd',function($q){
            $q->where('ProdMain.status','in',[1,0]);
        })
            ->where([
            ['barcode', '=', $barcode],
            ['prodid', '<>', $prodid]
        ])->find();

結束

以上只是對單個關聯條件的篩選,如果是多個關聯添加呢,例如我的產品及關聯了分組又關聯了規格,既要根據分組篩選,又要根據規格篩選該怎么辦

問題總比方法多啊

要下班了,下次繼續


免責聲明!

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



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