php - 通过多个外键 INSERT INTO 多个表
问题描述
我有多个表通过几个不同的外键连接在一起(见附件图片)。
我正在尝试插入项目表。我一直在尝试通过下面的代码来实现这一点,但它不起作用。现在我收到一条错误消息,说 client_id_fk 和 project_manager_id_fk 都没有值。这是有道理的,因为我没有将它们包含在插入中,但没有自动递增,而且我也不能只向这些字段添加随机 int,因为这也会引发错误。如果我将 client_id_fk 和 project_manager_id_fk 设置为 NULL,它在技术上有效,但是其他表中没有数据...请帮助
$sql1 = "INSERT INTO PROJECTS (Project_Name, StartDate) VALUES( '".$_POST["Project_Name"]."','".$_POST["StartDate"]."')";
$sql2 = "INSERT INTO CLIENTS(Client_Name, Client_Email, Client_Phone) VALUES ('".$_POST["Client_Name"]."','".$_POST["Client_Email"]."','".$_POST["Client_Phone"]."')";
$sql3 = "INSERT INTO PROJECT_MANAGERS(ProjectManager_Name,Project_Manager_Email, Project_Manager_Phone) VALUES ('".$_POST["ProjectManager_Name"]."','email', 'phone')";
$sql4 = "INSERT INTO TYPE_OF_WORK(TypeOfWork) VALUES ('".$_POST["TypeOfWork"]."')";
解决方案
退后一步,想想你正在塑造的关系。你告诉 MySQL 一个项目有一个客户和一个项目经理;那讲得通。然后,您尝试插入仅包含以下信息的项目:
INSERT INTO PROJECTS (Project_Name, Start_Date) ...
你得到的错误是问你“这个项目是为哪个客户服务的,项目经理是谁?” 那是只有你才能知道的事情。
- 如果是新客户,则需要在 Project 之前插入;如果是新的项目经理,您也需要在项目之前插入它。插入它们后,您需要获取它们的 ID,例如使用
LAST_INSERT_ID()
函数. - 如果它是现有的客户和/或项目经理,您需要根据您的应用程序中任何有意义的逻辑来查找他们的 ID。
一旦你有了这两个 ID,你就可以创建你的项目:
INSERT INTO PROJECTS (Project_Name, Start_Date, Client_Id, Project_Manager_Id) ...
推荐阅读
- css - SCSS :从另一个文件导入变量和样式规则。我不想要重复样式规则
- c# - 为什么我不能将可空元组用于可空泛型参数
- docker - Python Docker 库不适用于 Django REST Image
- java - 将mongodb与springboot restful webservice连接时出错
- nginx - 尽管定义了 ngx.close(),但 Lua 脚本不会关闭 Nginx
- reactjs - 如何将本地数组设置为全局反应?
- javascript - 如何获取 Dynatrace 等 Web 监控的正常运行时间图表?
- java - 二次采样 imageview 设置最小缩放
- azure-ad-b2c - azure-ad-b2c 成功验证 otp 消息
- sequence - 数据阶段中的可重新启动序列作业是否也重新运行不是因为序列失败而中止的作业活动