标签: doctrine-orm

如何在另一个选择框中使用相关的选择框?

如何在Symfony中使用相关的选择框?

比方说,我有一个包含compagnies的选择列表,另一个包含所选公司的员工.我如何在Symfony中定义它们?我已经创建了所有与Javascript相关的代码,但在提交表单并在某些字段上出错时,所有"sub"选择字段都将重置为null.

有任何想法吗?
谢谢,

编辑:由于这个问题似乎被误解了,我将添加一些精确性:

说明:

  1. 我有一个实体公司,其中包含使用@OneToMany关系的员工列表.
  2. 当我在选择/下拉列表中选择公司时,包含员工的第二个下拉列表将通过jQuery更新.那部分完成,完美地运作
  3. 在提交表单时没有错误,实体表单解决方案工作正常.
  4. 提交包含错误的表单时,第二个下拉列表包含所有可能的值.它们不会在选定的公司上过滤.

尝试的解决方案:

  • 我的第一个想法是使用表单实体类型,认为组件可以以某种方式绑定在另一个字段上.即.根据所选公司的价值更新员工列表.

不工作,没有办法开箱即用.即使是非开箱即用的解决方案......

  • 然后我考虑手动将所选公司作为参数传递给第二个下拉列表的查询构建器.

但是在创建表单时,值为空.这些值仅在bindRequest上设置.

  • 考虑使用选择类型.通过Javascript将所有过滤器功能委托给UI.页面加载时的含义,将显示一个空列表,并由Javascript根据所选公司填充.

这实际上是有效的,但我认为除了真正难看的编程之外别无他法.

PS:

这里有一个问题,在Symfony2邮件列表,Twitter和官方Symfony 2论坛上.在发布我的问题之前,我当然已经多次搜索过这些.

forms validation symfony doctrine-orm

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

Symfony2 Doctrine2与可选的一对一关系出现问题

我在Symfony2和两个关联实体中遇到了Doctrine2的问题.

有一个用户实体可以(不一定)有一个引用的usermeta实体,其中包含传记等信息.

usermeta是可选的,因为用户是由另一个系统导入的,而usermeta是在我的应用程序中管理的.

当然我想将两者保存在一起,以便保存用户必须创建或更新usermeta-entity.

两者都由名为aduserid的列连接(两个表中的名称相同).

我已经认识到,如果usermeta是一个可选引用,在这种情况下,拥有方应该是usermeta,否则doctrine会加载用户并需要usermeta实体 - 但它并不总是存在.

请注意User-> setMeta中的注释..

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User
{
/**
 * @var Usermeta
 * @ORM\OneToOne(targetEntity="Usermeta", mappedBy="user", cascade={"persist"})
 */
protected $meta;

public function getMeta()
{
    return $this->meta;
}

/**
 * 
 * @param Usermeta $metaValue 
 */
public function setMeta($metaValue)
{        
// I've tried setting the join-column-value here 
//  - but it's not getting persisted
// $metaValue->setAduserid($this->getAduserid());

// Then I've tried to set the user-object in Usermeta - …
Run Code Online (Sandbox Code Playgroud)

orm one-to-one symfony doctrine-orm

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

Symfony - >如何使用Doctrine使创建和修改的字段动态化?

我是Symfony2(或Symfony3)的新手,我找不到如何设置doctrine(带注释配置),以便在"创建"或"修改"字段时自动将其保存在我的实体中.

orm date symfony doctrine-orm

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

Symfony表单 - 子条目内的访问实体键入CollectionType

我正在尝试访问父CollectionType内部给定嵌入式表单的实体FormBuilder:

ParentType的

Class ParentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

ChildType

class ChildType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $child = $builder->getData(); // this returns null
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Vendor\Bundle\Entity\Child',
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这是以正常形式工作,$child但返回为null.我怎样才能访问Child里面的实体ChildType

php symfony-forms symfony doctrine-orm

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

拥有side作为连接列的主键

注意: 主题冗长但详细,如果您使用Doctrine2和oneToOne关系,可能会派上用场.

最近我在学说中遇到了一个问题:

我使用oneToOne双向关系创建了User和UserData对象:

User:
...
  oneToOne:
    userdata:
      targetEntity: UserData
      mappedBy: user

UserData:
...
  oneToOne:
    user:
      targetEntity: User
      inversedBy: userdata
Run Code Online (Sandbox Code Playgroud)

所以UserData是拥有user_id列的拥有者:

user: id, ...
userdata: id, user_id, ...
Run Code Online (Sandbox Code Playgroud)

这就产生了一个问题,每次你获取一个User对象(单个用户,用户集合或其他对象的集合,用户加入它)时,Doctrine会为每个用户延迟加载一个UserObject.

问题描述如下:

这里描述的建议解决方案:

所以有三种方法:

  1. 等等,看看是否在Doctrine中解决了提议的解决方案,并在将来的版本中修复(可能不会发生)
  2. 手动将每个查询中的UserData加入User(仍然浪费资源,不需要UserData)
  3. 切换反面并使用户拥有自己的一面.

我决定和#3一起去.所以我的架构关系现在看起来像这样:

User:
...
  oneToOne:
    userdata:
      targetEntity: UserData
      inversedBy: user

UserData:
...
  oneToOne:
    user:
      targetEntity: User
      mappedBy: userdata
Run Code Online (Sandbox Code Playgroud)

这意味着我的表现在看起来像这样:

user: id, userdata_id, ...
userdata: id, ...
Run Code Online (Sandbox Code Playgroud)

我决定不再使用Userdata.id自动增量,而是手动设置它并将其与user.id匹配.这意味着UserData.id将始终匹配user.id.

问题我可以使用user.id(主要自动增量密钥)作为joinColum而不是userdata_id,因为它们总是具有相同的值吗?你认为这种做事有任何潜在的问题吗?

关于这个问题的任何其他提示或意见都非常受欢迎和赞赏.

symfony doctrine-orm

22
推荐指数
2
解决办法
5326
查看次数

如何在Doctrine 2中配置命名策略

我在手册中阅读了有关Doctrine命名策略的章节.不幸的是我不明白我在哪里放置配置代码.

为了获得下划线命名策略,我应该使用以下代码:

$namingStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_UPPER);
$configuration()->setNamingStrategy($namingStrategy);
Run Code Online (Sandbox Code Playgroud)

我应该把它放在哪里?

我在Symfony 2上 - 我想这在配置方面很重要.

symfony doctrine-orm

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

对象关系映射与数据库抽象层

我正在使用提供ORM和DBAL的Doctrine.

他们之间有什么区别?

应该如何决定何时使用哪个?

orm doctrine doctrine-orm dbal

22
推荐指数
1
解决办法
5731
查看次数

如何在Doctrine2/Symfony2中的我的存储库中获取外部存储库?

我需要来自2个不同实体的值.我不知道该怎么做.到目前为止我试过这个:

<?php

namespace Pond\GeolocBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * PondLakeRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PondLakeRepository extends EntityRepository
{

    public function getSwimsAvailableById($id)
    {
        // get the nb of swims of a lake
        $lake = $this->findOneById($id);
        $swims = $lake->getSwims();

        $repository = $this->getDoctrine()
                           ->getManager()
                           ->getRepository('PondGeolocBundle:User_Lake');

        //get the nb of users in a lake
        $qb = $this->_em->createQueryBuilder();
        $qb->select('count(a.id)');
        $qb->from('PondGeolocBundle:User_Lake', 'a');

        $nbOfUsers = $qb->getQuery()->getSingleScalarResult();

        // return the nb of swims …
Run Code Online (Sandbox Code Playgroud)

php repository symfony doctrine-orm

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

如何在Doctrine2中按案例排序(Symfony2)

我想在Symfony 2.3中使用Doctrine来运行此查询.但似乎Doctrine不理解CASE声明.有人可以帮忙吗?先感谢您!

SELECT max(id) id, name
FROM cards
WHERE name like '%John%'
GROUP BY name
ORDER BY CASE WHEN name like 'John %' THEN 0
           WHEN name like 'John%' THEN 1
           WHEN name like '% John%' THEN 2
           ELSE 3
      END, name
Run Code Online (Sandbox Code Playgroud)

php mysql case-when symfony doctrine-orm

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

Doctrine DBAL - 带有附加参数的WHERE IN数组

使用示例文档,我能够获得这样的查询.

SELECT
f.foo,
b.bar
FROM Foo f
LEFT JOIN Bar b
WHERE 
f.foo = 20
AND b.bar IN ?
Run Code Online (Sandbox Code Playgroud)

使用DBAL,此代码返回结果.

$result = $this->connection->executeQuery(
            $SQL,
            array($bar_array),
            array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
        )->fetchAll();
Run Code Online (Sandbox Code Playgroud)

我想搜索f.foo作为单个整数参数以及查找IN语句,但我还没有弄清楚如何使它运行,因为所有示例文档都将数组作为唯一参数.

php mysql doctrine-orm dbal

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