private function retrieveGoods($commodityId, $specification) { // match $commodity = Commodity::find($commodityId); $goods = $commodity->goods->where('specification', $specification); // constraint error if ($goods->count() > 0) { throw new \Exception('Commodities and specification unique constraint error!'); } // create Goods if not exist if ($goods->isEmpty()) { $goods = new Goods(); $goods->commodity()->associate($commodity); $goods->specification = $specification; $goods->save(); } return $goods; }