标签: doctrine-orm

Doctrine 2:在DateTimeType.php中调用非对象的成员函数format()

我有一个DateTime领域:

/**
 * Date time posted
 * @Column(type="datetime")
 */
private $dtPosted;
Run Code Online (Sandbox Code Playgroud)

通过使用LifeCycleCallback将其设置为默认值

/**
 * @PrePersist
 */
function onPrePersist() {
    // set default date
    $this->dtPosted = date('Y-m-d H:m:s');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

致命错误:在第46行的D:\ ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php中的非对象上调用成员函数format()

php doctrine doctrine-orm

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

Sytrfony 2中的学说2中的唯一约束

我想在我的Doctrine 2实体中创建一个唯一的约束,以便name&test是唯一的列.含义

  • OBJ1

    • name:name1
    • 测试一下
  • OBJ2

    • 名称:name2
    • test:test <----重复

这应该会在测试重复时触发错误.

我尝试使用唯一约束(Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity).试着

 * @UniqueEntity("name")
 * @UniqueEntity("test")
Run Code Online (Sandbox Code Playgroud)

 * @UniqueEntity({"name", "test"})
Run Code Online (Sandbox Code Playgroud)

当我有两个名称和测试重复时,两者似乎只触发错误.例如.

  • OBJ1

    • name:name1
    • 测试一下
  • OBJ2

    • 名称:name2
    • 测试一下

什么是正确的设置?或者我可能在某个地方犯了错误?

也许我应该包括如下的学说注释:

@Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})})
Run Code Online (Sandbox Code Playgroud)

但是我觉得那仍然不能处理我的symfony表单验证?

UPDATE

我的测试代码:

/**
 * @ORM\Entity
 * @ORM\Table(name="roles") 
 * @UniqueEntity("name")
 * @UniqueEntity("test")
 */
class Role {

    /**
     * @var integer
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue
     */
    protected $id;

    /**
     * @var string
     * 
     * @ORM\Column(type="string", length=32, unique=true)
     * @Assert\MaxLength(32)
     * @Assert\Regex("/^[a-zA-Z0-9_]+$/")
     */ …
Run Code Online (Sandbox Code Playgroud)

validation symfony doctrine-orm

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

如何从Doctrine中的join-table(ManyToMany)中删除行?

我有一个通过@ORM\ManyToMany在Symfony2/Doctrine中使用注释创建的连接表.它加入CategoryParameter表.

现在我想删除Parameter表中的所有参数.因为在join-table上定义了外键约束,所以我不能只从Parameter表中删除行.首先,我必须从join-table中删除子行.但是Dotrine的DQL语法需要给出实体的名称,例如:

DELETE Project\Entity\EntityName
Run Code Online (Sandbox Code Playgroud)

但是使用ManyToMany关联生成的连接表实体的名称是什么?怎么处理呢?

或者,如何在@ORM\ManyToMany注释定义的连接表中的外键约束上设置ON UPDATE CASCADE和ON DELETE CASCADE .

编辑:

连接表模式:

CREATE TABLE `categories_params` (
    `category_id` INT(11) NOT NULL,
    `param_id` INT(11) NOT NULL,
    PRIMARY KEY (`category_id`, `param_id`),
    INDEX `IDX_87A730CB12469DE2` (`category_id`),
    INDEX `IDX_87A730CB5647C863` (`param_id`),
    CONSTRAINT `categories_params_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `allegro_category` (`id`),
    CONSTRAINT `categories_params_ibfk_2` FOREIGN KEY (`param_id`) REFERENCES `category_param` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

on UPDATE并且on DELETE在默认情况下被设置为RESTRICT

最终解决方案将是:

 * @ORM\ManyToMany(targetEntity="CategoryParam", cascade={"persist","remove"})
 * @ORM\JoinTable(name="categories_params",
 *      joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")},
 * …
Run Code Online (Sandbox Code Playgroud)

mysql symfony doctrine-orm

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

'不在'查询中使用doctrine查询构建器

我试图重现这个查询:

SELECT * FROM `request_lines`
where request_id not in(
select requestLine_id from `asset_request_lines` where asset_id = 1 
)
Run Code Online (Sandbox Code Playgroud)

在doctrine查询构建器中,我被困在where_id不在的位置(选择

我目前有:

$linked = $em->createQueryBuilder()
        ->select('rl')
        ->from('MineMyBundle:MineRequestLine', 'rl')
        ->where()
        ->getQuery()
        ->getResult();
Run Code Online (Sandbox Code Playgroud)

doctrine doctrine-query symfony doctrine-orm

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

如何在Doctrine2中使用SQL的YEAR(),MONTH()和DAY()?

我想在本机SQL中执行一个看起来像这样的查询:

SELECT
    AVG(t.column) AS average_value
FROM
    table t
WHERE
    YEAR(t.timestamp) = 2013 AND
    MONTH(t.timestamp) = 09 AND
    DAY(t.timestamp) = 16 AND
    t.somethingelse LIKE 'somethingelse'
GROUP BY
    t.somethingelse;
Run Code Online (Sandbox Code Playgroud)

如果我试图在Doctrine的查询生成器中实现这个,如下所示:

$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
   ->from('MyBundle:MyEntity', 'e')
   ->where('YEAR(e.timestamp) = 2013')
   ->andWhere('MONTH(e.timestamp) = 09')
   ->andWhere('DAY(e.timestamp) = 16')
   ->andWhere('u.somethingelse LIKE somethingelse')
   ->groupBy('somethingelse');
Run Code Online (Sandbox Code Playgroud)

我得到错误异常

[语法错误]第0行,第63行:错误:预期的已知函数,得到'年'

如何使用Doctrines查询构建器实现我的查询?

笔记:

  • 我知道Doctrine的Native SQL.我试过这个,但它导致了我的高效和我的开发数据库表有不同名称的问题.我想工作数据库不可知,所以这是没有选择.
  • 虽然我想工作db不可知:FYI,我正在使用MySQL.
  • 有办法将Doctrine扩展到"学习" YEAR()等语句,例如,如此处所示.但我正在寻找避免包含第三方插件的方法.

mysql sql sql-date-functions doctrine-orm

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

如何在使用PHPUnit进行测试时设置Doctrine2灯具?

我正在尝试使用Symfony2,并一直在尝试为我的应用程序的模型层设置自动化测试.Symfony2书谈到了控制器的单元测试,但我找不到很多模型测试的例子.

我希望在每次测试运行之前都有一个干净的数据集,并找到这些文章:

根据sznapka.pl文章,我有一个实际运行的测试没有错误,但是虽然创建了测试模式,但是没有加载.我看不出为什么,甚至是一种调试方法.

背景:我之前使用的是CakePHP,其中夹具的装载很大程度上是自动处理的,也许我对Symfony/Doctrine有错误的方法?

unit-testing symfony doctrine-orm

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

在foreach循环中Doctrine2 $ em-> persist($ entity)

我目前在一个地方,我需要在foreach循环中创建或更新实体.

所以我正在做以下(短代码):

foreach ($dataset as $data) {
    $entity = new Entity();

    // ---- Some setting operations on the entity

    $em->persist($entity);
}

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

我期待的是Doctrine管理实体,然后用一个语句将实体插入表中.

但它发生了,Doctrine为每个创建的实体创建了一个语句.由于$ dataset数组可能相当大(创建了很多实体),我想把它打包成一个语句.

我怎样才能做到这一点?

symfony doctrine-orm

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

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

PHP模拟最终类

我试图模拟一个PHP final class但是因为它被声明final我一直收到这个错误:

PHPUnit_Framework_Exception: Class "Doctrine\ORM\Query" is declared "final" and cannot be mocked.

反正final是为了我的单元测试而不引入任何新框架来解决这种行为?

php phpunit unit-testing mocking doctrine-orm

28
推荐指数
6
解决办法
1万
查看次数

PDO :: __ construct():服务器发送了客户端未知的charset(255).请向开发人员报告

我正在尝试从Symfony 3应用程序连接到MySQL数据库.但是当尝试从Symfony控制台命令创建MySQL模式时,我收到此错误:PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers

PHP和MySQL都在Docker容器中运行.

MySQL版本: 8.0.1

PHP版本: 7.1.3

司机: pdo_mysql

字符集: UTF8

DSN: "mysql:host=mysql;dbname=database;charset=UTF8;"

有任何想法吗?

php mysql pdo symfony doctrine-orm

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