我大量使用实体监听器进行日志记录,通常工作得很好并且将所有代码保留在控制器/服务之外.
我无法实现的一件事是记录添加到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) 我一直在努力解决烦人的问题.我正在尝试创建与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上正确反映.
任何想法或建议将不胜感激.
谢谢
我有一个使用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)
但不幸的是,这导致了一个不可恢复的依赖问题: …
我尝试安装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
我正在努力学习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)
所以看来我的专栏完全被忽略了.我重新清理了缓存,没有改变任何东西.显然,我迷路了.任何关于正确路径的提示都将受到赞赏.
谢谢.
我想在我的网站上制作一个导航栏.
我有一个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) 我在数据库中有很多类别.
这是类别实体
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) 我正在尝试使用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数据库.请告诉我如何纠正此错误.
我试图在我的数据库中插入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) 我需要获取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) doctrine-orm ×10
symfony ×9
php ×4
doctrine ×2
entity ×1
events ×1
flush ×1
php-5.6 ×1
sonata-admin ×1
symfony1 ×1