如何在Symfony中使用相关的选择框?
比方说,我有一个包含compagnies的选择列表,另一个包含所选公司的员工.我如何在Symfony中定义它们?我已经创建了所有与Javascript相关的代码,但在提交表单并在某些字段上出错时,所有"sub"选择字段都将重置为null.
有任何想法吗?
谢谢,
编辑:由于这个问题似乎被误解了,我将添加一些精确性:
不工作,没有办法开箱即用.即使是非开箱即用的解决方案......
但是在创建表单时,值为空.这些值仅在bindRequest上设置.
这实际上是有效的,但我认为除了真正难看的编程之外别无他法.
这里有一个问题,在Symfony2邮件列表,Twitter和官方Symfony 2论坛上.在发布我的问题之前,我当然已经多次搜索过这些.
我在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) 我是Symfony2(或Symfony3)的新手,我找不到如何设置doctrine(带注释配置),以便在"创建"或"修改"字段时自动将其保存在我的实体中.
我正在尝试访问父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?
注意: 主题冗长但详细,如果您使用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.
问题描述如下:
这里描述的建议解决方案:
所以有三种方法:
我决定和#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,因为它们总是具有相同的值吗?你认为这种做事有任何潜在的问题吗?
关于这个问题的任何其他提示或意见都非常受欢迎和赞赏.
我在手册中阅读了有关Doctrine命名策略的章节.不幸的是我不明白我在哪里放置配置代码.
为了获得下划线命名策略,我应该使用以下代码:
$namingStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_UPPER);
$configuration()->setNamingStrategy($namingStrategy);
Run Code Online (Sandbox Code Playgroud)
我应该把它放在哪里?
我在Symfony 2上 - 我想这在配置方面很重要.
我正在使用提供ORM和DBAL的Doctrine.
他们之间有什么区别?
应该如何决定何时使用哪个?
我需要来自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) 我想在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) 使用示例文档,我能够获得这样的查询.
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语句,但我还没有弄清楚如何使它运行,因为所有示例文档都将数组作为唯一参数.
doctrine-orm ×10
symfony ×8
php ×4
orm ×3
dbal ×2
mysql ×2
case-when ×1
date ×1
doctrine ×1
forms ×1
one-to-one ×1
repository ×1
validation ×1