对于模糊性表示抱歉,但我对如何描述此数据库问题感到困惑。部分原因是数据库设计问题,另一部分是如何有效地使用Doctrine ORM和Symfony的表单构建器引擎。让我试着解释一下:
我的数据库包含手机维修。每次维修仅适用于一部手机。但是,有些手机有不同的颜色。虽然某些维修(如电池更换)适用于所有设备,但某些(如显示屏更换)根据设备的颜色有不同的价格。应该可以在- (void)updateBottomLayoutGuides
{
// this method ends up calling -(id)bottomLayoutGuide on its UIViewController
// and thus updating where the Legal link on the map should be.
[self.mapView setNeedsLayout];
}
菜单中指定每个修复的颜色(选择一个,多个或全部)。
我目前的数据库设计如下:
但这不允许我从修复实体访问设备的颜色,因为这里颜色与设备有直接关系,而不是修复。因此,我需要一个更复杂的数据库,它仍然将iphone视为单个产品,但可以将各种修复映射到以及将所有变体的通用修复映射到。
我应该使用由3个ID组成的连接表(repair_device_color)吗?看起来不漂亮。使用Doctrine ORM进行映射的最有效方法是什么?我应该使用数据继承吗??
答案 0 :(得分:0)
根据现实世界的修复方案,可能会通过更改正文来更改设备的颜色,您可能希望维护额外的3个实体而不是一个关联devices_colous_repairs
:
device_attributes
(设备多对一)device_repair_attrbutes
(仅当修复过程中的属性发生更改时,才会修复多个修复ID。repair_billing
。 (多对一的修复ID,可选的外键,device_repair_attrbutes
适用。只是建议规范化数据。
答案 1 :(得分:0)
我想给你一个很好的答案,所以我花了一点时间来创造我的答案。这可能不完美,但它会给你一个想法。顺便说一句,你给出的数字不是ER图。
我在Excel中创建了这个,并复制并保存为图片。表名和ORM注释很重要。
例如,您将以标准方式创建一个文件名为“src / AppBundle / Entity / Device.php”的“设备”实体。对于数组,您需要在Entity类中添加__construct()函数。
例如,这就是设备实体的代码:
<?php
// src/AppBundle/Entity/Device.php
namespace AppBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="device")
*/
class Device
{
/**
* @ORM\Id
* @ORM\Column(name="device_id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $device_id;
/**
* @ORM\Column(name="model", type="string", unique=true)
*/
protected $model;
/**
* @ORM\OneToMany(targetEntity="Part", mappedBy="part_device")
*/
protected $parts = null;
...
public function __construct(){
// This is an array of parts.
$this->parts = new ArrayCollection();
// Create the other arrays too.
$this->repairs = new ArrayCollection();
$this->customers = new ArrayCollection();
}
/*
* This should automatically be generated by the command.
* php bin/console doctrine:generate:entities AppBundle/Entity/Device
*/
public function addPart($part){
$this->parts[] = $part;
}
}
希望你能弄明白其余的。但我认为这是一个好的开始。