Docker+Symfony7环境下PostgreSQL插入数据后Adminer无法查看
问题解决方案
1. 先解决User表查询异常的核心冲突
PostgreSQL中user是系统内置表(存储数据库用户信息),你的实体类命名为User会直接导致表名冲突,查询时优先返回系统表数据。
- 修改实体类的表名,比如改为
app_user:#[ORM\Entity(repositoryClass: UserRepository::class)] #[ORM\Table(name: 'app_user')] class User { // 其他代码保持不变 } - 执行数据库迁移更新表结构:
symfony console make:migration symfony console doctrine:migrations:migrate - 之后用命令行查询
SELECT * FROM app_user就能看到自己插入的用户数据了。
2. 解决Adminer看不到数据的问题
命令行能查到但Adminer看不到,90%是数据库/模式连接不一致:
- 核对Symfony数据库配置:打开
.env或.env.local,确认DATABASE_URL的参数,重点看数据库名称、用户名、指定的schema:DATABASE_URL="postgresql://db_user:db_password@db:5432/db_name?serverVersion=16&charset=utf8mb4&schema=public" - 检查Adminer登录参数:登录时必须选择和Symfony配置完全一致的数据库名称、用户名,schema选
public,不要误选PostgreSQL默认的postgres数据库。 - 确认Docker网络一致性:确保Symfony、PostgreSQL、Adminer三个服务在同一个Docker网络中,docker-compose.yml配置示例:
不在同一网络会导致Adminer连接的是宿主机PostgreSQL(而非容器内的),数据自然不一致。networks: app-net: driver: bridge services: db: image: postgres:16 networks: - app-net # 其他配置 adminer: image: adminer networks: - app-net # 其他配置 php: build: ./php networks: - app-net # 其他配置
3. 处理ID生成策略弃用警告
Symfony 7中Doctrine部分旧ID生成策略已被弃用,直接指定适合PostgreSQL的策略即可:
#[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\Column(type: 'integer')] private ?int $id = null;
修改后重新执行迁移命令更新表结构。
4. 关于localhost:5432无响应的问题
这是因为PostgreSQL容器没有把5432端口映射到宿主机,若不需要宿主机直接连接数据库,完全可以不用处理——Symfony和Adminer都是通过Docker网络访问容器内的5432端口,不影响正常使用。如果需要宿主机连接,在docker-compose.yml的db服务中添加端口映射:
services: db: image: postgres:16 ports: - "5432:5432" # 其他配置
最后验证步骤
- 执行
symfony console doctrine:schema:validate,确认实体和数据库表结构完全匹配。 - 重新插入测试数据,用命令行
symfony console dbal:run-sql 'SELECT * FROM app_user'和SELECT * FROM post_event确认数据存在。 - 登录Adminer,选择正确的数据库和
public模式,查询对应表,确认数据正常显示。
内容的提问来源于stack exchange,提问作者B O
相关产品推荐
相关产品推荐

