标签: doctrine-orm

Doctrine Event Listener用于添加/删除Many to Many关系

我大量使用实体监听器进行日志记录,通常工作得很好并且将所有代码保留在控制器/服务之外.

我无法实现的一件事是记录添加到ManyToMany关系的项目.在这种情况下,我想记录从产品中添加/删除大小的时间

/**
 * @ORM\Entity
 * @ORM\EntityListeners({"EventListener\ProductListener"})
 * @ORM\Table(name="products")
 */
class Product
{
    // ...

    /**
     * @var ArrayCollection
     *
     * @ORM\ManyToMany(targetEntity="Size")
     * @ORM\JoinTable(name="productSizes",
     *      joinColumns={@ORM\JoinColumn(name="productId", referencedColumnName="productId")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="sizeId", referencedColumnName="sizeId")}
     * )
     */
    protected $sizes;

    /**
     * @param Size $size
     * @return Product
     */
    public function addSize(Size $size)
    {
        $this->sizes[] = $size;
        return $this;
    }

    /**
     * @param Size $size
     */
    public function removeSize(Size $size)
    {
        $this->sizes->removeElement($size);
    }

    /**
     * @return ArrayCollection
     */
    public function getSizes()
    {
        return $this->sizes;
    } …
Run Code Online (Sandbox Code Playgroud)

events doctrine-orm

0
推荐指数
1
解决办法
974
查看次数

Doctrine EventListener onFlush不保存原始实体

我一直在努力解决烦人的问题.我正在尝试创建与InventoryItems过期关联的通知实体.

这些InventoryItems是为用户自动生成的,但用户可以编辑它们并单独设置它们的到期日期.保存后,如果InventoryItem具有到期日期,则生成通知实体并将其关联.因此,当实体更新时会创建这些通知实体,因此onPersist事件不起作用.

一切似乎都运行良好,并在按预期保存InventoryItems时生成通知.唯一的问题是,当第一次创建通知时,即使它已正确保存,也不会保存对InventoryItem的更改.即创建了具有正确到期日期的通知,但有效期未保存在InventoryItem上.

这是我的onFlush代码:

 public function onFlush(OnFlushEventArgs $args)
{
    $em  = $args->getEntityManager();
    $uow = $em->getUnitOfWork();
    foreach ($uow->getScheduledEntityUpdates() as $entity) {
        if ($entity instanceof NotificableInterface) {
          if ($entity->generatesNotification()){
              $notification = $this->notificationManager->generateNotificationForEntity($entity) ;
              if ( $notification ) {
                  $uow->persist($notification) ; 
              }
              $entity->setNotification($notification) ; 
              $uow->persist($entity);
              $uow->computeChangeSets();
          }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该问题仅在通知第一次与实体关联时发生,即第一次在InventoryItem上设置到期日期.在更新到期日期的后续实例中,更新将在Notification和InventoryItem上正确反映.

任何想法或建议将不胜感激.

谢谢

flush event-listener symfony doctrine-orm

0
推荐指数
2
解决办法
1608
查看次数

是否有与PHP 5.6兼容的Doctrine 2版本

我有一个使用Doctrine> = 2.2.3,<2.4-dev的Symfony 2.3应用程序.我将生产服务器升级到PHP 5.6,导致FOSUserBundle出现以下错误:

Warning: Erroneous data format for unserializing 'air\cms2Bundle\Entity\User' in /vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php on line 833

Fatal error: __clone method called on non-object in /vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php on line 837
Run Code Online (Sandbox Code Playgroud)

该实体是FOSUserBundle BaseUser的只是一个扩展,如图所示这里.可以在此处找到FOSUserBundle BaseUser类.

在做了一些初步研究之后,我发现错误是由PHP 5.6和Doctrine 2兼容性问题引起的,因为PHP 5.6 中的Serializable发生了变化.Doctrine开发人员已经解决了这个问题(请参阅GitHub pull请求),但是我仍然不确定我需要哪个版本的Doctrine 2 composer.json才能获得修复,而且我也不确定Symfony 2的哪个版本呢兼容.

我目前composer.json:

"require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.2.*",
        ...
},
Run Code Online (Sandbox Code Playgroud)

更新:

我已将我的composer.json更新为:

"require": {
    "php": ">=5.6.0",
    "symfony/symfony": "2.6.*",
    "doctrine/orm": "~2.5",
    "doctrine/doctrine-bundle": "1.2.*",
    ...
},
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这导致了一个不可恢复的依赖问题: …

symfony doctrine-orm fosuserbundle php-5.6

0
推荐指数
1
解决办法
3990
查看次数

Sonata用户捆绑包配置错误

我尝试安装Sonata User Bundle,但是执行命令时配置出现问题

app/console sonata:easy-extends:generate SonataUserBundle -d src
Run Code Online (Sandbox Code Playgroud)

git bash显示此错误:

 [Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]
  The service "sonata.user.orm.group_manager" has a dependency on a non-exist
  ent parameter "fos_user.model.group.class". Did you mean this: "fos_user.mo
  del.user.class"?
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm fosuserbundle sonata-admin sonata-user-bundle

0
推荐指数
1
解决办法
1432
查看次数

Symfony:向Doctrine Entity添加列

我正在努力学习Symfony的基础知识,并遇到了令我困惑的问题.

我正在尝试将数据写入SQL表,主要是遵循文档中的说明(http://symfony.com/doc/current/book/doctrine.html).我创建了一个实体

$ php bin/console doctrine:generate:entity
Run Code Online (Sandbox Code Playgroud)

它正确映射到我的数据库表,我可以读写,没问题.之后,我在表格中添加了一列,并向我的实体添加了相应的行:

/**
 *  @var string
 *
 *  @ORM\Column(name="User_Credentials", type="text")
 */
private $userCredentials;
Run Code Online (Sandbox Code Playgroud)

然后我尝试创建setter和getter,但没有进行任何更改,只是我的Entity的备份.所以我自己添加了getter和setter,但是当尝试写入DB时,相应的列被省略,保持为空.没有错误.我检查并重新检查了拼写错误或其他sytax错误,但找不到任何错误.做的时候

$ php bin/console doctrine:schema:update --dump-sql
Run Code Online (Sandbox Code Playgroud)

我明白了

ALTER TABLE st_users DROP User_Credentials;
Run Code Online (Sandbox Code Playgroud)

所以看来我的专栏完全被忽略了.我重新清理了缓存,没有改变任何东西.显然,我迷路了.任何关于正确路径的提示都将受到赞赏.

谢谢.

php doctrine symfony doctrine-orm

0
推荐指数
1
解决办法
3713
查看次数

递归实体主义

我想在我的网站上制作一个导航栏.

我有一个SQL表菜单.菜单可以有儿童菜单等....

CREATE TABLE IF NOT EXISTS MENU
(
    menu_Id INT AUTO_INCREMENT NOT NULL,
    nom VARCHAR(100) NOT NULL,
    route VARCHAR(255) NOT NULL,
    parent INT NULL,
    CONSTRAINT pk_MENU PRIMARY KEY (menu_Id),
    CONSTRAINT fk_MENU_MENU FOREIGN KEY (parent) REFERENCES MENU(menu_Id)
);
Run Code Online (Sandbox Code Playgroud)

我在Entity文件夹中的symfony项目中有一个类.

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
* @ORM\Entity
* @ORM\Table(name="menu")
*/
class Menu
{
    /**
    * @ORM\Column(name="menu_Id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    /**
    * @ORM\Column(name="nom", type="string", length=100)
    */
    protected $lib;

    /**
    * @ORM\Column(type="string", length=100)
    */ …
Run Code Online (Sandbox Code Playgroud)

php symfony1 symfony doctrine-orm

0
推荐指数
1
解决办法
2335
查看次数

Symfony从表单类型的实体创建选择

我在数据库中有很多类别.

这是类别实体

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="categories")
 */
class Category
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Category")
     */
    protected $rootCategory;

    /**
     * @ORM\Column(type="text")
     */
    protected $name;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Category
     */
    public function setName($name)
    {
        $this->name = $name; …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

0
推荐指数
1
解决办法
7676
查看次数

Symfony 3.0 PostgreSQL数据库错误

我正在尝试使用Symfony 3.0和PostreSQL数据库.

Parameters.yml:

parameters:
    database_driver: pdo_pgsql
    database_host: 127.0.0.1
    database_port: 5432
    database_name: dmfa
    database_user: username
    database_password: password
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    secret: a28a9e1bfefb5aa6f7f3be73a9a62c01eedf55ab
Run Code Online (Sandbox Code Playgroud)

我运行以下代码来尝试生成和实体:

php ./bin/console doctrine:generate:entity
Run Code Online (Sandbox Code Playgroud)

尽管将我的驱动器更改为pdo_pgsql但是我收到以下错误:

[Doctrine\DBAL\Exception\DriverException]                                          
  An exception occured in driver: SQLSTATE[HY000] [2006] MySQL server has gone away 

[Doctrine\DBAL\Driver\PDOException]                
  SQLSTATE[HY000] [2006] MySQL server has gone away

[PDOException]                                     
  SQLSTATE[HY000] [2006] MySQL server has gone away

[PDOException]                                  
  PDO::__construct(): MySQL server has gone away 
Run Code Online (Sandbox Code Playgroud)

感觉我错过了一步,因为Symfony仍然在寻找一个mysql数据库.请告诉我如何纠正此错误.

symfony doctrine-orm postgresql-9.5

0
推荐指数
1
解决办法
2284
查看次数

Json_array在学说symfony中

我试图在我的数据库中插入json数据与doctrine由于某种原因我无法在数据库中插入数据

这是我的代码

namespace ScheduleBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

//Json Response
use Symfony\Component\HttpFoundation\JsonResponse;

//Class Controller
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

//Request
use Symfony\Component\HttpFoundation\Request;

use ScheduleBundle\Entity\schedule;

class ApiController extends Controller
{
  /**
   * @Route("/api/{week}")
   */
  public function roosterApi(Request $request, $week)
  {
    //
    //
    // print_r($rooster);
    //
    // echo 'Rooster: ' . $dataRooster->getSchedule();
    $rooster = array('week' => '1');

    $roosterConnection = $this->get('doctrine')->getRepository('ScheduleBundle:schedule', 'schedule');
    $dataRooster = $roosterConnection->findOneByStudentId('36838');


    $dataRooster->setSchedule($rooster);

    $out = array('1' => $week);

    return new JsonResponse($out, 200, array('Content-Type' => 'application/json'));
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的实体

namespace ScheduleBundle\Entity;

use Doctrine\ORM\Mapping as …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony doctrine-orm

0
推荐指数
1
解决办法
5566
查看次数

在Doctrine实体中获取最大ID

我需要获取symfony 2.7实体内的表的最大ID.但我没有得到这个问题,而是得到了这个问题.

注意:未定义的属性:AppBundle\Entity\BlogPost :: $ container

这是我的BlogPost实体,

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\UploadedFile;

/**
 * BlogPost
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class BlogPost {

    const SERVER_PATH_TO_IMAGE_FOLDER = '/uploads';

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="body", type="text")
     */
    private $body;

    /**
     * @var string
     *
     * @ORM\Column(name="filename", type="text")
     */
    private …
Run Code Online (Sandbox Code Playgroud)

entity query-builder symfony doctrine-orm

0
推荐指数
1
解决办法
5666
查看次数