【发布时间】:2014-08-26 09:56:07
【问题描述】:
我是 Doctrine 的新手,我正在尝试实现 Doctrine 2.5 中的新 Embeddables。
简化代码:
<?php namespace Blah;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="test")
*/
class Test {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @var integer
*/
private $id;
/**
* @ORM\Embedded(class="Name")
* @var Name
*/
private $name;
public function __construct(Name $name)
{
$this->name = $name;
}
public function getId()
{
return $this->id;
}
/**
* @return Name
*/
public function getName()
{
return $this->name;
}
}
/**
* @ORM\Embeddable
*/
class Name {
/**
* @ORM\Column(type="string")
*/
private $value;
public function __construct($value)
{
$this->value = $value;
}
public function __toString()
{
return $this->value;
}
}
看到查询日志,Doctrine 正在尝试插入/获取奇怪地命名为 name_value 而不是 name 的列。
我想要的是在Test中输入一个Name类型的对象,作为字符串保存在数据库中。当我检索实体时,我希望名称的类型是名称,而不是字符串。
我尝试在 name 属性中的实体中使用 @ORM\Column(type="string"),它确实有效。但是当 Doctrine 获取实体时,我得到的不是 Name 类型,而是一个字符串。
我还尝试在值对象中设置 v*@ORM\Column(type="string", name="name")*,只是为了让 Doctrine 将该字段命名为 name_name而不是 name_value。
数据库架构是手动创建的。 我正在使用 Mitchellvanw/laravel-doctrine 使用 Laravel 和 Doctrine。
【问题讨论】:
标签: php laravel laravel-4 doctrine-orm doctrine