thinkphp關聯的一些查詢如hasWhere怎么用or查詢


注意:本例子都以衣服表和衣服sku表為例。

(衣服表:衣服的基本信息;衣服sku表:衣服不同規格的排列組合。易理解是說法,有款夾克衣服,那它的基本信息存衣服表,它不同尺寸和顏色排列組合得到的衣服信息存到衣服sku表)

 

1.場景一:通過衣服名稱搜索衣服基本信息

  這個顯然是單模型搜索如

$where[] = ['goods_name','like','%'.$keywords.'%'];//模型中寫了搜索器的,直接寫成數組key=>value形式
GoodsModel::where($where);

2.場景二:查詢sku表的所有信息,並且關聯衣服基本信息

  其實就是查出sku表但是關聯一下主表(因為也要顯示主表的一些信息)

//1.在GoodsSukModel中建立與GoodsModel一對一的關系 (如果goods到GoodsSuk關聯就是一對多了)
    /**
     * 一對一關聯
     * @return \think\model\relation\HasOne
     */
    public function goods()
    {
        //bind是把查出來的對象中指定字段取出來
        return $this->hasOne(GoodsModel::class, 'id', 'goods_id')->where('is_del', 0)->bind(['goods_name','spu']);
    }


//2.GoodsSukDAO中的調用
$with = ['goods'];
GoodsSukModel::where()->with($with)

3.場景三:因為現在衣服sku是主模型,可通過顏色尺寸查詢sku信息

$where[] = ['size','=','xl'];
$with = ['goods'];
GoodsSukModel::where($where)->with($with)

 

4.場景四:如果上面的搜索功能想増加即按照主模型(GoodsSukModel)字段搜索,也能按照關聯模型衣服表的名稱搜索

$where[] = ['size','=','xl'];
$hasWhere[] = ['goods_name','like','%夾克%']; //模型中寫了搜索器的,直接寫成數組key=>value形式
$with = ['goods']; GoodsSukModel::where($where)->hasWhere('goods',$hasWhere )->with($with)

參考 : https://www.kancloud.cn/manual/thinkphp6_0/1037600

 

 

5.場景五:我們知道在主模型(GoodsSukModel)搜索有 where和whereOr,但是關聯模型的搜索默認是and,怎么用or呢?

    我們想按照,衣服表中的goods_name和衣服的款號搜索,只要任意匹配到都行?

        $with = ['goods'];
        $field = [];
        $res = $this->getModel()->hasWhere('goods',function($query)use($keywords){
            $query->where('goods_name', 'like', '%'.$keywords.'%')->whereOr('spu', 'like', '%'.$keywords.'%');
        })->with($with)->whereOr('size','xl')->field($field)->paginate($size)->toArray();

也可以不用閉包,用下面的返回$where對象 

參考(最下面):https://www.kancloud.cn/manual/thinkphp6_0/1037602

 


免責聲明!

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



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