這個項目是我的畢業設計,是校園閒置物品小程序,用戶可以發佈自己的商品,也可以下架自己的商品。在下架自己的商品同時,需要刪除掉商品收藏表中關於該商品的收藏關係。先看模型:
user_id | 主鍵,用戶id |
goods_id | 主鍵,商品id |
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;
}
}
之後在控制器層調用該方法就行啦。