Tec*_*mad 3 php doctrine doctrine-orm laravel laravel-4
我是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;
}
}
Run Code Online (Sandbox Code Playgroud)
查看查询日志,Doctrine正在尝试插入/获取奇怪命名为name_value而不是name的列.
我想要的是将一个Name类型对象输入到Test中,将其作为字符串保存在数据库中.当我检索实体时,我希望name的类型为Name,而不是string.
我尝试在name属性的实体中使用@ORM\Column(type ="string"),它有点工作.但是,当Doctrine获取实体时,我得到一个字符串而不是Name类型.
我还尝试在值对象value属性中设置v*@ ORM\Column(type ="string",name ="name")*,仅将Doctrine名称作为name_name而不是name_value.
数据库架构是手动创建的.我正在使用Laravel和Doctrine使用mitchellvanw/laravel-doctrine.
在Doctrine的邮件列表上发帖后(感谢Marco Pivetta指出负责的代码),我了解到Doctrine的设计前缀是嵌入式的.
要删除必须设置的前缀columnPrefix=false并适当地命名您的值.
结果代码将是:
<?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", columnPrefix=false)
* @var Name
*/
private $name;
/**
*
* @param Name $name
*/
public function __construct(Name $name)
{
$this->name = $name;
}
/**
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @return Name
*/
public function getName()
{
return $this->name;
}
}
/**
* @ORM\Embeddable
*/
class Name {
/**
* @ORM\Column(type="string", name="name")
*/
private $value;
/**
* @param string
*/
public function __construct($value)
{
$this->value = $value;
}
/**
* @return string
*/
public function __toString()
{
return $this->value;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
Doctrine的embeddables文档已更新,以反映此配置.
| 归档时间: |
|
| 查看次数: |
2304 次 |
| 最近记录: |