取消「票根」概念,并入观影照片(数据迁移 220 条)(#87)
用户:现在不是已经没有票根的概念了吗?全部都换成观影照片了。别管是票根 还是观影照片,都在一起。现在只分两类:一类是海报,一类是观影照片。 海报是来自豆瓣的,这个不用管它,主要就是观影照片,所有的都在观影照片里边。 事实核查:概念取消了,数据没取消。网页端 v35 只在**模板层**把它们画进 同一个网格,数据层仍是两条路:票根在 movie_details.ticket_key(单张槽位), 不在 event_photos 里 ⇒ 没有 id ⇒ 删不掉,端上得写"票根另算"特判。 线上数据:有票根 220 条,其中 209 条只有票根、没有任何照片; event_photos 总数才 14 —— 也就是说「观影照片」里装的几乎全是票根。 ① 数据迁移(已执行,220/220 成功,失败 0): 逐条把 ticket_key 插进 event_photos(position 取比现有最小值再小 10, ⇒ 排第一,因为票根是"这场电影的凭证",用户认知里排最前),然后置 NULL。 event_photos 14 → 234,旧票根残留 0。 ⚠️ 幂等:靠"该 key 已在该 event 的 event_photos 里"判断,重复跑不插重复行; ⚠️ 不删存储对象:只搬引用,图片原地不动,失败也不丢图。 ② 同一段逻辑写进 Schema VERSION 36→37,让新库/重装库走同一套, 不靠"记得手工跑脚本"。对线上是空操作(已验证 234→234)。 ③ 服务端停止读写票根字段(字段保留作历史审计,代码不再碰): - Movie::find 不再 SELECT ticket_key; - Movie::saveDetails UPSERT 去掉 ticket_key; - Movie::destroy 不再单独查/删票根对象(已并入 photos 循环); - index.php:上传槽位 [poster,ticket] → [poster], stage_ticket 不再认领,media_del 白名单只剩 poster; - form.php:删票根特殊格子 + mv-del-ticket 表单 + $mHasTicket; - show.php:删票根格子 + 灯箱 ticket 项 + $hasTicket。 验证:find(1,1)/find(1,224) 已不返回 ticket_key,photos 3/4 条票根在首位; 直接 include 模板无 Fatal,form.php 里 mv-del-ticket / stage_ticket 各 0 次; 6 个文件 md5 逐个核对一致、php -l 全过、已上线且升级到 37。
This commit is contained in:
+21
-10
@@ -95,8 +95,12 @@ final class Movie
|
||||
/** 一条完整记录(详情/编辑页用):事件 + 卫星 + 影院 + 同行人 + 照片 */
|
||||
public static function find(int $familyId, int $id, int $viewerId = 0): ?array
|
||||
{
|
||||
/* 🔴 2026-11-06:**不再 SELECT `ticket_key`**。
|
||||
用户要求"只分两类:海报、观影照片",旧票根已经一次性迁进
|
||||
`event_photos`(见迁移脚本与 Schema VERSION 37 的说明),
|
||||
字段本身也置 NULL 了。继续查它出来只会让上层又长出第三个概念。 */
|
||||
$st = Database::get()->prepare(
|
||||
'SELECT e.*, d.info, d.poster_key, d.ticket_key, d.cinema_id, d.douban_meta,
|
||||
'SELECT e.*, d.info, d.poster_key, d.cinema_id, d.douban_meta,
|
||||
c.place AS cinema_place, c.name AS cinema_name,
|
||||
c.address AS cinema_address, c.color AS cinema_color
|
||||
FROM events e
|
||||
@@ -151,7 +155,8 @@ final class Movie
|
||||
/**
|
||||
* 新建一条观影记录,返回事件 id。
|
||||
* $d 字段:title, starts_at(Y-m-d H:i:s), ends_at, location, note, info,
|
||||
* cinema_id(int|null), poster_key, ticket_key, attendees(int[]), photos(string[])
|
||||
* cinema_id(int|null), poster_key, attendees(int[]), photos(string[])
|
||||
* ⚠️ 2026-11-06:`ticket_key` 已取消(票根并入 photos)。
|
||||
*/
|
||||
public static function create(int $familyId, ?int $creatorId, array $d): int
|
||||
{
|
||||
@@ -211,17 +216,20 @@ final class Movie
|
||||
$row = [
|
||||
self::textOrNull($d['info'] ?? ''),
|
||||
self::keyOrNull($d['poster_key'] ?? ''),
|
||||
self::keyOrNull($d['ticket_key'] ?? ''),
|
||||
$cid > 0 ? $cid : null,
|
||||
$meta,
|
||||
];
|
||||
$has = $db->prepare('SELECT COUNT(*) FROM movie_details WHERE event_id = ?');
|
||||
$has->execute([$eventId]);
|
||||
/* 🔴 2026-11-06:`ticket_key` 从这条 UPSERT 里**移除**了。
|
||||
票根概念已取消(迁进 `event_photos`),再写它等于把它复活。
|
||||
⚠️ 列还留在表里(不清字段,留作历史审计),但代码不再碰它;
|
||||
迁移已把存量置 NULL,所以它现在是全 NULL 的死列。 */
|
||||
if ((int)$has->fetchColumn() > 0) {
|
||||
$db->prepare('UPDATE movie_details SET info=?, poster_key=?, ticket_key=?, cinema_id=?, douban_meta=? WHERE event_id=?')
|
||||
$db->prepare('UPDATE movie_details SET info=?, poster_key=?, cinema_id=?, douban_meta=? WHERE event_id=?')
|
||||
->execute([...$row, $eventId]);
|
||||
} else {
|
||||
$db->prepare('INSERT INTO movie_details (info, poster_key, ticket_key, cinema_id, douban_meta, event_id) VALUES (?,?,?,?,?,?)')
|
||||
$db->prepare('INSERT INTO movie_details (info, poster_key, cinema_id, douban_meta, event_id) VALUES (?,?,?,?,?)')
|
||||
->execute([...$row, $eventId]);
|
||||
}
|
||||
}
|
||||
@@ -386,15 +394,18 @@ final class Movie
|
||||
$keys[] = $tk;
|
||||
}
|
||||
}
|
||||
/* 🔴 2026-11-06:票根已并入 `event_photos`,上面的 photos() 循环就把
|
||||
它收集进来了 —— 原来这里还要单独查一次 `ticket_key` 并删对象,
|
||||
现在**不需要且不该要**(字段已置 NULL,查出来也是空)。
|
||||
⚠️ 海报仍单独存在 `movie_details.poster_key`,所以要留这一段。 */
|
||||
$st = Database::get()->prepare(
|
||||
'SELECT poster_key, ticket_key FROM movie_details WHERE event_id = ?'
|
||||
'SELECT poster_key FROM movie_details WHERE event_id = ?'
|
||||
);
|
||||
$st->execute([$id]);
|
||||
if ($row = $st->fetch()) {
|
||||
foreach ([$row['poster_key'], $row['ticket_key']] as $k) {
|
||||
if ($k) {
|
||||
$keys[] = (string)$k;
|
||||
}
|
||||
$k = (string)($row['poster_key'] ?? '');
|
||||
if ($k !== '') {
|
||||
$keys[] = $k;
|
||||
}
|
||||
}
|
||||
Database::get()->prepare('DELETE FROM events WHERE id = ? AND family_id = ? AND kind = "movie"')
|
||||
|
||||
Reference in New Issue
Block a user