标签: doctrine

如何从symfony2中删除实体

我的第一个symfony2项目是存储在数据库中的guest虚拟机列表(在事件中受邀).我有

  • 创建了实体类Guest,包含所有变量(id,name,address,phone number等)
  • 在mysql db中创建了模式
  • 为树枝模板创建了"添加访客"的路线
  • 创建了一个formType

最后在Controller中使用"createGuest"方法,一切正常.

我无法从数据库中删除guest虚拟机.我已经阅读了网络上的每个教程,包括官方的Symfony2书; 所有它说的是:

删除对象

删除对象非常相似,但需要调用实体管理器的remove()方法:

$em->remove($product);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

关于如何将控制器deleteAction($ id)与twig模板连接起来,它没有说更多(甚至"更新对象"部分缺少文档).我想要做的是列出所有具有viewGuests操作和viewGuests树枝模板的客人,每行旁边都有一个删除图标,您应该单击该图标以删除条目.很简单,但我找不到任何文档,也不知道从哪里开始.

public function deleteGuestAction($id)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $guest = $em->getRepository('GuestBundle:Guest')->find($id);

        if (!$guest) {
            throw $this->createNotFoundException('No guest found for id '.$id);
        }

        $em->remove($guest);
        $em->flush();

        return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
    }
Run Code Online (Sandbox Code Playgroud)

doctrine symfony

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

Doctrine:cascade ="remove"vs orphanremoval = true

上面两个选项有什么区别?什么时候最好选择每个选项?

doctrine cascade cascading-deletes symfony

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

使用symfony2和doctrine从现有数据库生成单个实体

是否可以使用Symfony2控制台工具从数据库生成单个实体?

在编码过程中,我必须添加一个表,并对现有的实体类进行了修改.所以我不希望我的所有实体都重新生成.

任何建议将不胜感激!

php database doctrine symfony

57
推荐指数
5
解决办法
8万
查看次数

Doctrine 2继承映射与关联

注意:如果我不想要的话,将接受"不可能"的答案

关于继承映射Doctrine 2文档中,它说有两种方法:

  • 单表继承(STI)
  • 类表继承(CTI)

两者都有警告:

如果您将STI/CTI实体用作多对一或一对一实体,则不应将继承层次结构的较高级别某个类用作"targetEntity",而只应使用没有子类的那些类.否则,Doctrine不能创建该实体的代理实例,并且总是急切地加载该实体.

那么,我如何继续使用与基类(抽象)类的关联继承?(并保持当然的表现)


用户有很多Pet(抽象类扩展为DogCat).

我想做的事 :

class User {
    /**
     * @var array(Pet) (array of Dog or Cat)
     */
    private $pets;
}
Run Code Online (Sandbox Code Playgroud)

由于Doctrine文档中的警告,我应该这样做:

class User {
    /**
     * @var array(Dog)
     */
    private $dogs;
    /**
     * @var array(Cat)
     */
    private $cats;
}
Run Code Online (Sandbox Code Playgroud)

这很烦人,因为我放弃了继承的好处!

注意:我没有为映射到DB添加Doctrine注释,但您可以理解我的意思

php orm inheritance doctrine doctrine-orm

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

Symfony2在服务容器中使用Doctrine

如何在服务容器中使用Doctrine?

代码只会导致错误消息"致命错误:调用未定义的方法...... :: get()".

<?php

namespace ...\Service;

use Doctrine\ORM\EntityManager;
use ...\Entity\Header;

class dsdsf
{ 
    protected $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function create()
    {
        $id = 10;
        $em = $this->get('doctrine')->getEntityManager();
        $em->getRepository('...')->find($id);
    }
}
Run Code Online (Sandbox Code Playgroud)

services.yml

service:
    site:
        class: ...\Service\Site
Run Code Online (Sandbox Code Playgroud)

doctrine symfony

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

Doctrine 2 OneToMany Cascade SET NULL

错误

无法删除或更新父行:外键约束失败.

课程

class Teacher {

    /**
     *@ORM\OneToMany(targetEntity="publication", mappedBy="teacher")
     */
    protected $publications;
}

class Publication {

    /**
     * @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications")
     * @ORM\JoinColumn(name="teacher_id", referencedColumnName="id")
     */
    protected $teacher;
}
Run Code Online (Sandbox Code Playgroud)

我想要

我想要的是,当你删除教师时,id_teacher被修改为NULL.我想保留出版物但不参考教授.

我不知道在Doctrine中是怎么做的,这可能吗?或者总是与老师的关系?

null doctrine set one-to-many

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

使用Doctrine 2检查重复键

在进行刷新之前,是否有一种简单的方法可以检查Doctrine 2的重复键?

doctrine doctrine-orm

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

PHPUnit模拟对象和静态方法

我正在寻找测试以下静态方法的最佳方法(特别是使用Doctrine模型):

class Model_User extends Doctrine_Record
{
    public static function create($userData)
    {
        $newUser = new self();
        $newUser->fromArray($userData);
        $newUser->save();
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会使用模拟对象来确保调用"fromArray"(使用提供的用户数据)和"save",但这是不可能的,因为该方法是静态的.

有什么建议?

php phpunit unit-testing doctrine mocking

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

Symfony2 $ user-> setPassword()将密码更新为纯文本[DataFixtures + FOSUserBundle]

我正在尝试使用一些User对象预先填充数据库,但是当我调用$user->setPassword('some-password');然后保存用户对象时,字符串'some-password'直接存储在数据库中,而不是散列+ salted密码.

我的DataFixture类:

// Acme/SecurityBundle/DataFixtures/ORM/LoadUserData.php
<?php

namespace Acme\SecurityBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;

use Acme\SecurityBundle\Entity\User;

class LoadUserData implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $userAdmin = new User();
        $userAdmin->setUsername('System');
        $userAdmin->setEmail('system@example.com');
        $userAdmin->setPassword('test');

        $manager->persist($userAdmin);
        $manager->flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

以及相关的数据库输出:

id  username    email               salt                                password
1   System      system@example.com  3f92m2tqa2kg8cookg84s4sow80880g     test
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony fosuserbundle

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

为什么MySQL不支持毫秒/微秒的精度?

所以我发现了MySQL中最令人沮丧的错误.

显然,TIMESTAMP现场和支持功能不支持比秒更精确!?

所以我使用PHP和Doctrine,我真的需要那些微秒(我正在使用该actAs: [Timestampable]属性).

我发现我可以使用BIGINT字段来存储值.但是教条会加几毫秒吗?我认为它只是将NOW()赋予该领域.我也担心通过代码散布的日期操作函数(在SQL中)会破坏.

我还看到了有关编译UDF扩展的一些内容.这是不可接受的,因为我或未来的维护者将升级和噗,改变了.

有没有人找到合适的解决方法?

php mysql doctrine

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