我想通过添加新的枚举值来扩展我的枚举类型。这非常简单。我还将所有SQL保留在迁移中,并使用对称向下迁移将每个迁移配对,从而将模式恢复到先前的状态。
但是,反向操作 - 从枚举中删除变体 - is not supported。
围绕这个的常见方法是什么?我可以看到两个选项:
if not exists
子句编写“up”迁移,并在“down”迁移中不执行任何操作。我不喜欢这个选项,因为它违反了应用和恢复迁移使模式处于以前状态的假设。答案 0 :(得分:2)
您无法迁移ENUM
。您的意见和评估是100%正确的。
我不喜欢此选项,因为它违反了以下假设:应用和还原迁移会使架构保持与以前相同的状态。
如果这是一个挂断,则该选项不在图片中。因为你是对的。
对于这样一个简单的操作,似乎有些矫kill过正。
这是因为从ENUM
删除值不是简单的操作。那么,为什么将具有更多值的ENUM
迁移到具有更少值的DB::select('SELECT bldgs.name as building , floors.name as floor, areas.name as area, locations.area_id ,count(reqs.location_id) as occupied FROM `reqs` '
. 'JOIN locations ON locations.id = location_id '
. 'JOIN areas ON areas.id = area_id '
. 'JOIN floors ON floors.id = areas.floor_id'
. ' JOIN bldgs ON bldgs.id = bldg_id '
. 'WHERE `status`=2 and (DATE_FORMAT(start_date,"%Y-%m")<= "'.$dateFrom.'" AND DATE_FORMAT(end_date,"%Y-%m")>="'.$dateTo.'") group by locations.area_id, areas.name, floors.name, bldgs.name' );
呢?
听马,
另一个很好的例子,为什么枚举通常不是一个好主意。如果您使用带有外键的标准查找表,这将非常容易。删除值就像运行DELETE语句一样简单 – a_horse_with_no_name