当候选键尚不存在时,使用外键添加新行

时间:2013-02-27 17:08:46

标签: php mysql database

我发现很难找到一个好的标题我希望我能更好地解释它。 我有两张桌子

"car" - id, car_id, name
"car_pictures" - id, fk_car_id, url

显然,“car”可以有多张图片,这些图片由car_id链接,在“car_pictures”表格中保存为“fk_car_id”。 前端的工作流程可能是:

- you add a new car to the database
- you add pictures to this car entry

如果按照这种方式进行操作,首先要在“car”表中创建一个新条目。然后你有一个“car_id”你可以在“car_pictures”表中引用。

但是如果你想改变这样的工作流程怎么办:

- you add a new car
- you immediately add pictures
- you save the new car to the database

如果按照这种方式进行操作,则仅在用户完成所有“步骤”时才创建数据库条目。但是如果你想将图片添加到汽车中,那么它还没有“car_id”。所以你不能引用id。

如果添加汽车并添加图片,通常的方法是两个单独的api调用。

我似乎需要澄清我在做什么。 假设我有两个api调用: www.domain.com/api/car/add/?name=newcar - >添加汽车(即添加到数据库) www.domain.com/api/car/picture/add/?car_id=x - >用于向汽车添加图片(即处理上传并将数据放入数据库)

前端看起来像这样: 一个包含所有汽车的表格的页面,您可以在另一个页面中编辑并添加新图片。另一个添加新车的页面也有可能添加图片。这与编辑汽车的页面/表格相同,只是没有car_id可用。

编辑:

我自己可以想办法处理这种情况。

首先:当用户打开“添加新车”表单时立即为汽车创建数据库条目。那样你总是有一个car_id。但是如果用户决定取消添加汽车并且需要删除那些“虚拟”数据库条目,则必须处理。如果出现问题,您可能会在数据库中以很多空车条目结束。也许该行有一个标志,当用户实际“插入”汽车时设置该标志。

第二:插入带有临时负片fk_car_id的新图片,如果在数据库中创建了行,则用实际的car_id更新这些行。

第三:当没有car_id时,将新图片保存到具有临时ID的临时表中。那么你必须返回那个临时id,并在数据库中创建汽车条目时从临时表中移动这些条目。

但这些想法听起来很复杂,我希望有一些最佳实践方法。也许问题出在我的工作流程本身,有一种更好的方法。然而,将添加汽车和将图片添加到数据库的过程分开似乎是一个好主意。

2 个答案:

答案 0 :(得分:0)

添加要使用mysql_insert_id()的汽车后,获取上次查询中生成的ID。然后你可以提交图片。

例如:

mysql_query("INSERT INTO car (name) VALUES ('car')");
$last_id = mysql_insert_id();
mysql_query("INSERT INTO car_pictures (fk_car_id, link) VALUES (".$last_id.",'link')");

我建议您使用PDO而不是mysql_

答案 1 :(得分:0)

你可以让car_pictures.fk_car_id可以为空,然后你可以插入没有主记录的图片,并在以后添加汽车时更新它...