ThinkPHP5.0中用模型進行關聯刪除

這個項目是我的畢業設計,是校園閒置物品小程序,用戶可以發佈自己的商品,也可以下架自己的商品。在下架自己的商品同時,需要刪除掉商品收藏表中關於該商品的收藏關係。先看模型:

商品收藏表collection_goods
user_id 主鍵,用戶id
goods_id 主鍵,商品id
商品表goods
goods_id 主鍵,商品id
price 價格
description 描述
其他字段... ...

在tp的model中,這兩張表分別對應Goods.php,CollectionGoods.php。由於用戶下架商品是從商品角度出發的,所以我們在Goods模型中去關聯CollectionGoods模型,它們是一對多的關係:

一對多模型可以使用:hasMany('要關聯的模型名稱','外鍵名稱','當前模型主鍵') 

<?php

namespace app\api\model;


class Goods extends Model
{
    /**
     * 獲取收藏關係
     */
    public function collectRelation(){
        return $this->hasMany('CollectionGoods');
    }
    /**
     * 下架指定商品
     */
    public static function destoryByOwner($goods_id,$uid){
        //    根據商品id在商品表中查詢,注意要使用get,不要用select,不然下一步關聯查詢會出錯
        $goods = self::get($goods_id);
        //    調用關聯查詢函數關聯商品收藏表,得到結果爲數組,visible指定顯示哪些字段
        $where = $goods->collectRelation()
                       ->select()
                       ->visible(['user_id','goods_id']);
        //開始事務
        self::startTrans();
        //    刪除商品表中的該商品
        self::destroy($goods_id,false);
        //    判斷該商品在商品收藏表中是否存在收藏關係
        if(count($where)>0){
            //    進行關聯刪除指定數據
            $result = $goods->collectRelation()->where($where)->delete();
            if($result == 0){
                //事務回滾
                self::rollback();
                throw new Exception('批量刪除收藏關係失敗');
            }else{
                //提交事務
                self::commit();
            }
        }else{
            //  提交事務
            self::commit();
        }
        return true;
    }
}

之後在控制器層調用該方法就行啦。 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章