【发布时间】:2014-10-15 08:50:34
【问题描述】:
我想将 Doctrine2 用于 ORM。我有一个非常简单的类和一个 XML 元数据映射。
一般的想法是,通过 ORM 和类的通信应该只通过 get/set 方法发生,而不会将类的内部(例如私有属性名称)暴露给 orm。
<?php
namespace Foo\Bar\Entity;
class Test {
private $name_property = null;
public function setName($name)
{
$this->name_property = $name;
}
public function getName()
{
return $this->name_property;
}
}
还有映射
<?xml version="1.0" encoding="UTF-8" ?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Foo\Bar\Entity\Test">
<field name="Name" type="text" />
</entity>
我认为这个设置应该在从/到数据库中取消/序列化对象时调用 getName() 和 setName($string_argument) 方法。
显然不是。
Property Foo\Bar\Entity\Test::$Name does not exist
我以为 Doctrine2 总是使用 get/set 方法与对象进行交互,因为它试图直接访问属性。
Doctrine 真的可以只映射类字段属性并总是尝试直接访问它们吗?如果我的 set() 方法包含业务逻辑(例如字符串参数验证),因此不能直接通过 Doctrine2 设置属性怎么办?我想我在这里遗漏了一些基本的东西。
提前感谢您的帮助!
【问题讨论】:
标签: symfony orm doctrine-orm