【发布时间】:2018-07-25 17:07:42
【问题描述】:
我有一张发票表。在这张表中,我有:
1- invoice_id 列,即PRIMARY KEY 和auto_increment。
2- invoice_number 列在数据库中是唯一的。
在我的实体中我有这个代码
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* Invoices
*
* @ORM\Table(name="invoices", uniqueConstraints={@ORM\UniqueConstraint(name="invoice_number", columns={"invoice_number"})})
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*
* @UniqueEntity(fields="invoiceNumber", message="invoice number is already exist")
*/
class Invoices
{
/**
* @var integer
*
* @ORM\Column(name="invoice_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $invoiceId;
/**
* @var string
*
* @ORM\Column(name="invoice_number", type="string", length=50, nullable=true, unique=true)
*/
private $invoiceNumber;
在控制器中我像这样使用$form->isValid()
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
}
我通过这段代码渲染字段
{{ form_label(form.salesInvoice.invoice.invoiceNumber, null, {'label_attr':{'class':'black'}}) }} <span class="required">*</span>
{{ form_widget(form.salesInvoice.invoice.invoiceNumber) }}
<div class="required"> {{ form_errors(form.salesInvoice.invoice.invoiceNumber) }}</div>
当我尝试保存具有重复 invoice_number 的发票时出现此错误
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1230008' for key 'invoice_number'
它不应该尝试保存而是显示验证消息
发票号已经存在
【问题讨论】:
-
这看起来不错...还有更多相关信息吗?您是通过常规输入设置数字,还是还有更多?其他验证约束是否在项目中起作用?
-
我编辑添加渲染代码的问题。是的,其他验证约束效果很好。
-
将其从实体成员名称
invoiceNumber更改为数据库字段名称invoice_number怎么样? -
你是直接和 MySQL 对话,为什么不在你的控制器中进行验证,
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1230008' for key 'invoice_number'这是 MySQL 的响应,你需要在你的控制器中进行验证。 -
@YousefAltaf 我已经完成了,但它不起作用。
标签: symfony doctrine unique-constraint