这是阶段:
Linux debian with Symfony2.5.6/Doctrine2 通过 (FreeTDS DB-lib) 连接到 Sql Server。
intellectsoft-uk/MssqlBundle 驱动程序已安装并运行正常。
两个与 SQL Server 相关的表,表/字段名称中带有spaces
(抱歉,我无法发布图像):
´
dbo.MYCOMPANY$Item
No. - varchar(32)
Description - varchar(32)
dbo.[MYCOMPANY$Item Variant]
Code - varchar(32)
Item No. - varchar(32)
´
注意:是的...这是一种可怕的命名风格,Dynamics Nav和微软是罪犯。
两个教义的实体将此表映射到指向Item
实体Item Variant
OneToMany
关系:
/**
* @ORM'Table(name="dbo.MYCOMPANY$Item")
* @ORM'Entity
*/
class Item
{
/* @ORM'Id
* @ORM'Column(name="[No_]", type="string", length=32)
*/
private $no;
/**
* @ORM'Column(name="Description", type="string", length=128)
*/
private $description;
/* @ORM'OneToMany(
* targetEntity="DymamicsBundle'Entity'ItemVariant",
* mappedBy="item", cascade={"persist","remove"})
*/
private $itemVariants;
}
/**
* @ORM'Table(name="dbo.[MYCOMPANY$Item Variant]")
* @ORM'Entity
*/
class ItemVariant
{
/* @ORM'Id
* @ORM'Column(name="Code", type="string", length=32, nullable=false)
*/
private $code;
/**
* @ORM'Id
* @ORM'ManyToOne(
* targetEntity="DymamicsBundle'Entity'Item",
* inversedBy="itemVariants")
* @ORM'JoinColumn(
* name="[Item No_]",
* referencedColumnName="[No_]", onDelete="CASCADE")
*/
private $item;
}
在控制器中,我查询一个项目 XXXXXX:
/** @Template() */
public function helloAction($name)
{
$item = $em->getRepository("DynamicsBundle:Item")->findByNo('XXXXXX');
return array('item' => $item);
}
在index.html.twig
模板中,我打印字段没有问题:
{% block content %}
{{ item.no }}
{{ item.description }}
{% endblock %}
。现在的问题是:
如果我尝试访问会员itemVariants
...
{% block content %}
{{ item.no }}
{{ item.description }}
This item has {{ item.itemVariants.count }} variants
{% for v in item.itemVariants %}
<p>{{ v.code }}</p>
{% endfor %}
{% endblock %}
我得到这个致命错误:
>
> An exception has been thrown during the rendering of a template
> ("Unrecognized field: t0.[Item No_]") in
> .../DynamicsBundle/Resources/views/Demo/index.html.twig at line 2.
>
一个经过测试的解决方案(对我来说不可行,因为我无法修改 Dynamics Nav 数据库字段):
重命名表中的Item No.
字段dbo.[MYCOMPANY$Item Variant]
...即 ItemNo
......问题已解决:
class ItemVariant
{
...
* @ORM'JoinColumn(
* name="ItemNo",
...
private $item;
}
输出:
This item has 2 variants
red
blue
因此。。。问题似乎是Item No.
字段名称
我尝试在 SQL Server 数据库中更改此参数:
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
ARITHABORT ON
QUOTED_IDENTIFIER ON
CONCAT_NULL_YIELDS_NULL ON
NUMERIC_ROUNDABORT OFF
。但什么都没有
¿有什么建议吗? 谢谢...
也许您应该在表和字段名称中使用 ' (在注释中)?
引自教义文档:
不能使用非 [a-zA-Z0-9_]+ 字符,它们会破坏多个 SQL 语句。
对这些列名称有问题?许多数据库支持对语义映射到某些表的视图执行所有 CRUD 操作。您可以为所有有问题的表和列名称创建视图,以避免遗留引用的噩梦。
因此,列名称"项目编号"中的空格是遇到问题的根源.
或者更具体地说,这里是防止连接列具有空格"字符的代码行。
因此,按照@Karol的建议为这些表创建视图,建议使用 @xhostar 方法。