标签: doctrine-orm

Doctrine 2连接表+额外字段

我有两个表和一个联接表:'staff','classification'和'staff_classification'.在连接表中,我有一个额外的布尔字段:'showclassification'.我的注释如下:

 /**
 * @ManyToMany(targetEntity="Staff", inversedBy="classifications")
 * @JoinTable(name="staff_classifications",
 *  joinColumns={@JoinColumn(name="staffid", referencedColumnName="id")},
 *  inverseJoinColumns={@JoinColumn(name="classificationid", referencedColumnName="id", unique=true)});
 */
Run Code Online (Sandbox Code Playgroud)
  1. 如何将额外字段"showclassifications"添加到连接表?
  2. 如何通过DQL引用该字段?例如,哪些查询可以获得允许显示的所有员工分类?
  3. 我是否将上述注释放在一个类中,将@ManyToMany注释放在另一个类中没有@joinTable?例如@ManyToMany(targetEntity ="Classification")?

field join jointable doctrine-orm

19
推荐指数
1
解决办法
8492
查看次数

如何将Doctrine2结果对象作为关联数组?

我有一个简单的实体,它是一个包含我的用户数据的表,我想将特定用户的所有列作为数组获取然后json_encode它们但我得到的是一个实体对象,我必须为每个值使用get方法.我只想要一个用户表值的关联数组.我尝试过但不起作用的代码(返回的实体对象)如下:1.

$qb = $this->em->createQueryBuilder();
$qb->add('select', 'a')
->add('from', 'Entities\Adminprofile a')
->add('where', 'a.userid = 3333');
$accounts = $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)

2.

$account = $this->em->getRepository('Entities\Adminprofile')->findOneBy(
array('userid' => '3333'));
Run Code Online (Sandbox Code Playgroud)

PS:即时通讯使用z2d2 Project,这是doctrine2集成到Zend框架中.

doctrine zend-framework doctrine-orm

19
推荐指数
3
解决办法
4万
查看次数

如何在Doctrine2中的YML中创建唯一约束?

我想在两个attributs上创建一个独特的约束.使用Doctrine2的YML配置没有很好的记录.所以我尝试用YML转换XML.这段代码出了什么问题?

unique-constraints:
    name: event_user
    columns:
        event_id: ~
        user_id: ~
Run Code Online (Sandbox Code Playgroud)

提前致谢.

symfony doctrine-orm

19
推荐指数
2
解决办法
8756
查看次数

如何在symfony2中设置表前缀

就像问题主题一样,我如何在symfony2中设置默认表格前缀?

对于所有实体,默认情况下可以设置为最佳,但可以选择覆盖单个实体.

php symfony doctrine-orm

19
推荐指数
2
解决办法
2万
查看次数

读取对象持久化但尚未用doctrine刷新

我是symfony2和doctrine的新手.这是看到的问题.我不能用:

$repository = $this->getDoctrine()->getRepository('entity');
$my_object = $repository->findOneBy($index);
Run Code Online (Sandbox Code Playgroud)

在一个持久的物体上,但不要冲洗!我认为getRepository从DB读取,因此它不会找到未刷新的对象.

我的问题:在我冲洗整个批次之前,如何阅读那些持久存在的对象(我认为它们是在"学说会话"中的某个地方)重新使用它们?

每个配置文件都有256个物理羽流.

每个配置文件都plumeOptions分配了1条记录.

plumeOptions,我有一个盒式弹药,它是一个FK PhysicalPlume.

每个羽流都由ID(自动生成)和INDEX(用户生成的)标识.

规则:我说配置文件1的physical_plume_index数字3(=索引)连接到它.

现在,我想将包含所有相关数据的配置文件复制到另一个配置文件.

新的个人资料已创建.从旧配置文件创建并复制新的256个羽流.

我想将新的配置文件链接到新的羽流指数3.

点击这里:http://pastebin.com/WFa8vkt1

symfony doctrine-orm

19
推荐指数
1
解决办法
2万
查看次数

如何将服务注入Symfony 2数据夹具?

如何将服务注入Symfony2/Doctrine2数据夹具?我想创建虚拟用户并需要security.encoder_factory服务来编码我的密码.

我尝试将我的数据夹具定义为服务

myapp.loadDataFixture:
    class: myapp\SomeBundle\DataFixtures\ORM\LoadDataFixtures
    arguments:
        - '@security.encoder_factory'
Run Code Online (Sandbox Code Playgroud)

然后在我的数据夹具中

class LoadDataFixtures implements FixtureInterface {

    protected $passwordEncoder;

    public function __construct($encoderFactory) {
        $this->passwordEncoder = $encoderFactory->getEncoder(new User());
    }

    public function load($em) {
Run Code Online (Sandbox Code Playgroud)

但得到了类似的东西

警告:缺少参数1 ...\DataFixtures\ORM\LoadDataFixtures :: __ construct(),在...中调用

symfony doctrine-orm

19
推荐指数
1
解决办法
1万
查看次数

在Symfony2中使用可扩展实体创建可移植Bundles

我想创建一些可以在不同项目中重用的Symfony2软件包,但是如果需要的话,实体也可以轻松扩展.

一个示例可以是可重用的UserBundle,其中包含定义了所有ORM映射的User实体.但是,在我的应用程序中,我可能希望扩展此实体并添加额外的列,关联或覆盖一些父级的映射.

我能找到的最接近的解决方案是Doctrine2映射的超类,但是后来我失去了可重用bundle的即插即用功能,即使我不想修改,我总是要在我的应用程序中扩展映射的超类.映射.

其他记录的继承方案需要修改父级的映射,然后我的UserBundle将不再可移植到项目中.

有没有办法在一个包中定义一个完全工作的实体,并仍然在另一个包中扩展它?

inheritance symfony doctrine-orm

19
推荐指数
1
解决办法
2958
查看次数

Symfony最佳实践.查询应该在存储库或服务中吗?

我对Symfony 2中的最佳实践有疑问.抱歉,如果它有点模糊和主观.我想我可以总结一下我的问题:

"存储库总是适合查询的地方吗?"

现在我把我的大多数学说查询放在实体存储库中.我的大多数控制器操作都执行典型的操作,例如查询实体或实体集合,抛出异常或重定向,具体取决于结果,否则更新一个或多个实体.大多数操作比标准 - > find, - > findBy等查询更有效.大多数都需要加入.当一个查询涉及多个实体时,有时我不确定它应该进入哪个存储库.我猜有查询的根实体但是......有时来自连接实体的数据更重要且更相关所以感觉不对将它放在根实体的存储库中.

这工作正常但我倾向于在我的存储库中得到很多几乎相同但略有不同的查询.提出名字并准确跟踪每个人所做的事情会让人感到困惑和乏味.大多数这些查询仅由同一控制器中的一个或两个(通常很少使用)控制器操作使用.我觉得我用太多专门的,很少使用的东西使我的存储库变得混乱.

看起来除了最简单的操作之外的所有操作都应该封装在对象或服务中.所以,我已经开始直接在服务中而不是存储库中执行大量查询.在一个地方很容易看到动作.这是一个好的做法吗?

symfony doctrine-orm

19
推荐指数
2
解决办法
9685
查看次数

是否可以在不删除数据库的情况下加载doctrine fixture

我已经定义了一些fixturesdoctrine.

当我尝试使用此运行

php app/console doctrine:fixtures:load 然后它要求我清除数据库.

是否可以在不清除数据库的情况下加载它.

我remeber Django已经fixtures可以在单独的表中被加载,而不需要清洁现有的数据库

php fixtures symfony doctrine-orm

19
推荐指数
1
解决办法
1万
查看次数

具有非相关实体的查询构建器中的"无效PathExpression.必须是StateFieldPathExpression"

我有四个实体:OfficialDocument,Media,NMediaStatusNMediaType.我正在尝试翻译这个SQL:

SELECT od.media, od.type, od.status, md.url, nms.name 
    FROM official_document od 
    LEFT JOIN media md ON od.media = md.id 
    LEFT JOIN n_media_status nms ON od.status = nms.id
    WHERE od.company = 9 
Run Code Online (Sandbox Code Playgroud)

到Doctrine Query Builder,这是结果:

public function findOfficialDocument($company_id) {
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select('od.media', 'od.type', 'od.status', 'md.url', 'nms.name', 'nmt.name');
    $qb->from('Company\RegisterCompanyBundle\Entity\OfficialDocument', 'od');
    $qb->leftJoin('Common\MediaBundle\Entity\Media', 'md', \Doctrine\ORM\Query\Expr\Join::WITH, 'od.media = md.id');
    $qb->leftJoin('Common\MediaBundle\Entity\NMediaStatus', 'nms', \Doctrine\ORM\Query\Expr\Join::WITH, 'od.status = nms.id');
    $qb->leftJoin('Common\MediaBundle\Entity\NMediaType', 'nmt', \Doctrine\ORM\Query\Expr\Join::WITH, 'od.type = nmt.id');

    $qb->where('od.company = ?1');
    $qb->setParameter(1, $company_id);

    return …
Run Code Online (Sandbox Code Playgroud)

doctrine symfony doctrine-orm

19
推荐指数
2
解决办法
4万
查看次数