roo*_*ays 7 php doctrine doctrine-orm
假设我有一个Doctrine(版本2)实体,如下所示:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="users")
* @ORM\Entity
*/
class User {
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=50, nullable=false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="group_id", type="string", length=6, nullable=true)
*/
private $groupId;
// Getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
现在,我想管理User的关系Group,但有一定的条件,如:
NULL(或某种骨架/模板的\AppBundle\Entity\Group不是从数据库加载与固定值),如果Group中users.group_id不存在的,即使它被设置为一个值(在数据库设置为阻止这种行为没有键限制),所以某种需要验证/检查Group,在呼叫时$user->getGroup()我一直在阅读谷歌,我对如何正确实现这一点感到困惑(与Doctrine/Symfony方式一致).
我可以将ManyToOne添加到实体的类关系中,如下所示:
/**
* @var \AppBundle\Entity\Group
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Group")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="group_id", referencedColumnName="id")
* })
*/
private $group;
Run Code Online (Sandbox Code Playgroud)
但那么如何防止由不存在的外键引起的异常呢?即我想在我的数据库中可用时检索用户的组详细信息,但是当它不是时,我不希望Doctrine抛出异常而导致我的应用程序崩溃.
人们说从内部使用实体经理Entity是一种非常糟糕的做法,我同意.但是我为使用代理对象或继承映射而感到困惑.
似乎使用Models可能是方式,但我找不到任何有关如何在Doctrine2中正确实现它们的强大文档.
如果可以的话请帮忙.在Kohana它是如此,如此简单(但这种方式不成熟).
编辑:
@Massimiliano Fedel建议尝试在User::getGroup()方法中捕获异常,最终使不存在的组返回NULL.
所以我提交了这段代码:
/**
* Get group
*
* @return \AppBundle\Entity\Group
*/
public function getGroup() {
try {
$group = $this->group;
} catch (\Doctrine\ORM\EntityNotFoundException $e) {
$group = null;
}
return $group;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎不能以这种方式捕获异常,因为框架以以下方式退出Doctrine\ORM\EntityNotFoundException:
Entity of type 'AppBundle\Entity\Group' for IDs id(999) was not found
Run Code Online (Sandbox Code Playgroud)
编辑2:
下面你可以找到一些User流程的基础模式,即为什么我不能确保所有数据库Users都可用Groups.
http://oi64.tinypic.com/1sfno5.jpg
小智 1
1)您是否尝试过捕获“group”的getter方法内的异常?这样您就可以捕获异常并在发生异常时返回“null”。
2) 根据原则 2.1 文档:“默认情况下关联被标记为惰性,这意味着关联的整个集合对象在第一次访问时被填充。” http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/tutorials/extra-lazy-associations.html
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |