Doctrine映射许多链接表

时间:2016-04-15 16:06:33

标签: php symfony doctrine mapping

我正在使用PHP中的遗留项目,而数据库中很少有表格如下所示:

表产品:

+----+-------------+----------------+
|id  | id_category | id_destination |
+----+-------------+----------------+
|1   | 3           | 1              |
|2   | 2           | 1              |
+----+-------------+----------------+

表类别:

+-------------+----------------+
| id          | category_name  |
+-------------+----------------+
| 2           | services       |
| 3           | transport      |
+-------------+----------------+

表“服务”和“传输”

+-------------+----------------+   +-------------+----------------+
| id          | name           |   | id          | kilometers     |
+-------------+----------------+   +-------------+----------------+
| 1           | 'foo'          |   | 1           | 156            |
| 2           | 'bar'          |   | 2           | 12             |
+-------------+----------------+   +-------------+----------------+

现在我需要检查ID为1的产品,它会调用:

$info = SELECT * FROM product WHERE ID = 1;

$table = SELECT category_name FROM category WHERE ID = $info['id_category'];

然后:

SELECT * FROM $table WHERE id = $info['id_destination'];

我的问题是如何在Doctrine中映射它。 我正在研究Symfony 2.6

1 个答案:

答案 0 :(得分:0)

您希望在Symfony中添加Entity classes来处理数据库中的数据;将这些视为数据库表本身。

然后使用Doctrine Association Mapping;这会自动处理查找表(如MySQL JOIN'),您只需获取$product并自动访问$product->getCategory()$product->getServices()

在Symfony网站上也有一篇关于此的文章,作为一个很好的介绍: http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata

应该足以让你入门。

在旁注中,请考虑upgrading Symfony至v3或至少v2.8,以便在您变得过深之前获得长期支持。