Doctrine2 / MySQL – 在多列上创建自动增量字段
作者:互联网
我想知道是否有可能有一个基于多列的自动增量字段?
这是我的问题:
我有一张桌子,用于存放LINES中的CARTS.我为每个购物车都有一个唯一的ID,但我也想为每一行生成一个唯一的ID.所以我可以在一行内有一个独特的CART ID.
实际上,我想从MySQL文档中完全按照此示例中的相同操作:
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
id在grp列中递增.
我对主键/索引有点失落,我不知道是否必须使用它们才能生成我的ID.
我试图将它添加到我的symfony实体,但它没有生成一个具有我想要的id的新列.
* @ORM\Table(indexes={@ORM\Index(name="line_idx", columns={"line_id"})})
谢谢你的帮助
解决方法:
好吧,我设法做我想做的事,我不确定这是否是最好的方法,但这是我的做法:
我添加了cart_id字段:
/**
* @var integer
*
* @ORM\Column(name="cart_id", type="integer", nullable=false)
*/
private $cart_id;
然后,我添加了一个独特的约束,只是为了确保一切都是独一无二的:
* @ORM\Table(uniqueConstraints={@UniqueConstraint(name="cart_idx", columns={"line_id", "cart_id"})})
然后,我创建了一个存储库函数来获取给定行的最后一个cart_id(我的购物车和我的行之间存在ManyToOne关系:
<?php
namespace CM\PlatformBundle\Entity;
use Doctrine\ORM\EntityRepository;
/**
* CartRepository
*/
class CartRepository extends EntityRepository
{
public function getLastCartIdForLine($lineId) {
return $this->createQueryBuilder('c')
->select('c.cart_id')
->join('c.line','l')
->andWhere('l.id = :lineId')
->setParameter('lineId', $lineId)
->orderBy('c.id', 'DESC')
->setMaxResults(1)
->getQuery()
->getSingleScalarResult();
}
}
我终于这样做了:
$cart = new Cart;
$lastCartId = $em->getRepository('CMPlatformBundle:Cart')->getLastCartIdForLine($lineId);
$cart->setCartId($lastCartId+1);
$em->persist($cart);
它有效,不确定它是否是处理此问题的最佳方法.如果你找到更好的东西,请告诉我.
标签:mysql,auto-increment,multiple-columns,symfony,doctrine-orm 来源: https://codeday.me/bug/20190708/1399600.html