Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我可以使用同一个表来表示Symfony中的不同实体吗?_Php_Doctrine - Fatal编程技术网

Php 我可以使用同一个表来表示Symfony中的不同实体吗?

Php 我可以使用同一个表来表示Symfony中的不同实体吗?,php,doctrine,Php,Doctrine,我正在将一个旧的PHP项目迁移到Symfony。我正在尝试基于现有数据库架构创建实体,我无法更改该架构。我面临一个问题: 有一个代表两个不同实体的表。基本上,存在一个布尔值(atinyint(1)),如果布尔值为false,则表中的行表示一个购物车。如果布尔值为true,则该行表示顺序 信条是否有可能区分这些实体并相应地获取这些实体?我愿意实现的解决方案是创建几个实体并覆盖这些实体存储库中的find()和findAll()方法。还有别的方法可以实现吗?这就是教义所说的 因此,您将有一个购物车实体

我正在将一个旧的PHP项目迁移到Symfony。我正在尝试基于现有数据库架构创建实体,我无法更改该架构。我面临一个问题:

有一个代表两个不同实体的表。基本上,存在一个布尔值(a
tinyint(1)
),如果布尔值为false,则表中的行表示一个购物车。如果布尔值为true,则该行表示顺序


信条是否有可能区分这些实体并相应地获取这些实体?我愿意实现的解决方案是创建几个实体并覆盖这些实体存储库中的
find()
findAll()
方法。还有别的方法可以实现吗?

这就是教义所说的

因此,您将有一个
购物车
实体和一个
订单
实体对其进行扩展

/**
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="App\Repository\CartRepository")
 * @ORM\InheritanceType(value="SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="is_order", columnDefinition="BOOL DEFAULT FALSE")
 * @ORM\DiscriminatorMap(
 *     value={
 *      CART::IS_CART=Cart::class,
 *      CART::IS_ORDER=Order::class
 *     }
 * )
 */
class Cart {
   const IS_CART = FALSE;
   const IS_ORDER = TRUE;
   ... // Entity field, getters, setters, functions...
}
然后是您的
订单
实体

/**
 * @ORM\Entity(repositoryClass=OrderRepository::class)
 */
class Order extends Cart {...}

这段代码可能有一些错误,我没有测试它,但应该可以。

您可以试一试。从未见过将布尔值用作鉴别器列,但它可能会工作。享受你的模式带来的乐趣。如果里面有这样的东西,谁知道你还会遇到什么。@Cerad我不认为你的评论是正确的。这是一个完全合理的模式。使用布尔值作为鉴别器值没有错。另外,
订单
实体可能与
购物车
实体没有任何区别。这里没有理由再有一张桌子了!