小编Got*_*bel的帖子

Doctrine2一对一/多对一关系

所以,1:M/M:1关系不像M:M关系那样工作(显然),但我认为通过适当的配置,你可以获得与M:M关系相同的输出.

基本上,我需要添加另一个字段(位置)path_offer.

我以为我得到它的工作,直到我尝试使用$path->getOffers()它返回一个PersistentCollection而不是我认为是强制的(一个ArrayCollection提供).无论如何,在当前表中,我有两个条目:两个提供到一个路径. $path->getOffers()返回一个PersistantCollectionPathOffer其中只有一个Offerattatched而不是两个.

我的问题是如何真正使用这些类型的关系?因为我需要这个项目的许多其他方面,我正在努力(许多M:M集合也需要定位)

我的代码如下!

Path.php

[..]

/**
 * @ORM\Entity
 * @ORM\Table(name="path")
 */
class Path
{
    /**
     * @var integer
     *
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="PathOffer", mappedBy="offer", cascade={"all"})
     */
    protected $offers;

[..]
Run Code Online (Sandbox Code Playgroud)

PathOffer.php

[..]

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

    /**
     * @ORM\ManyToOne(targetEntity="Path", inversedBy="offers", …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

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

使用Symfony时如何处理连接表中的其他列?

假设我的Symfony2包中有两个实体,User并且Group.与多对多关系相关联.

    ??????????????????         ??????????????????         ??????????????????
    |      USER      |         | USER_GROUP_REL |         |     GROUP      |
    ??????????????????         ??????????????????         ??????????????????
    | id#            ?---------? user_id#       |    ?----? id#            |
    | username       |         | group_id#      ?----?    | groupname      |
    | email          |         | created_date   |         |                |
    ??????????????????         ??????????????????         ??????????????????
Run Code Online (Sandbox Code Playgroud)

在连接表中添加其他列的好方法或好方法是什么,比如表示User加入日期的创建日期Group

我知道我可以用它QueryBuilder来写一个INSERT声明.

但据我没有看到任何 INSERT QueryBuilder或本机SQL的例子,这让我相信ORM/Doctrine试图避免直接INSERT语句(例如出于安全原因).另外,据我所知,Symfony和Doctrine如果框架不能涵盖这样的共同要求,我会感到吃惊.

datamodel symfony doctrine-orm

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

如何在Symfony2中处理SQL触发器?

User我的Symfony2/Doctrine2 webapp中有一个实体.此用户具有last_updated标识最新时间的属性,任何内容都已更改.我NOT NULL在我的数据库中设置了这个属性.到现在为止还挺好.

我认为在数据库中创建一个SQL触发器是一种很好的做法,它可以将其设置last_updatedNOW()每个INSERT或每个UPDATE.因此,您不必在应用程序中关注此问题.这就是我所做的,我在我的数据库中实现了这个触发器.

但是如果我现在在我的应用程序中创建一个用户

$user = new User();
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

我收到Symfony的错误消息:

'INSERT INTO User (username, ..., last_updated) VALUES (?, ..., ?)' 使用params 执行时发生异常["johndoe", ..., null]:

SQLSTATE [23000]:完整性约束违规:1048列'last_updated'不能为空

问题很明显:Symfony尝试INSERT使用参数nullfor 来触发数据库last_updated,这是不允许的 - 因为此属性可能不为null.

我可以很快想到两个解决方法:

  • 一种解决方法是last_updated从实体描述中取出该字段.然后Symfony不会尝试将任何内容传递给此列的数据库,触发器将设置适当的值.但我认为这不是一个好方法,因为只要我尝试更新db schema(doctrine:schema:update --force),我就会松开我的last_updated列.
  • 另一个解决方法:$user->setLastUpdated(new \DateTime())在我persist()和之前做flush().但这会最大限度地减少在我的数据库上使用触发器的优势,以避免在我的应用程序中关心它.

有没有办法让Symfony/Doctrine知道我的数据库上有一个触发器?如果没有,(如何)我可以挂钩到Symfony/Doctrine来实现正确的解决方法?

triggers symfony doctrine-orm

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

我该如何解决这个问题:列“created_at”与映射器中的另一列冲突

我目前正在使用 Symfony2 开发一个小项目。

我正在尝试从表中获取一天(默认为今天)的所有条目。

我首先在我的学说查询生成器中尝试使用DAY(),但这不起作用,所以我现在在我的实体存储库中使用本机 sql 查询:

$em = $this->getEntityManager();

$rsm = new ResultSetMappingBuilder($em);
$rsm->addRootEntityFromClassMetadata('Teacup\CompareBundle\Entity\Log', 'l');
$rsm->addJoinedEntityFromClassMetadata('Teacup\CompareBundle\Entity\Frame', 
                                       'f', 
                                       'l', 
                                       'frame', 
                                       array('id' => 'frame_id'));

$query = $em->createNativeQuery('SELECT l.id, l.severity, 
                                        l.details, l.created_at, f.url 
                                 FROM log l 
                                 INNER JOIN frame f ON l.frame_id = f.id 
                                 WHERE DAY(l.created_at) = :day', $rsm);
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

The column 'created_at' conflicts with another column in the mapper. 
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决它。我很确定这没什么,但我只是继续尝试,但没有成功。有人能帮我吗?

php symfony doctrine-orm

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

如何将参数传递给已翻译的验证错误消息

在Symfony2中,您可以翻译验证错误消息:

验证文件

# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
    properties:
        name:
            - NotBlank: { message: "author.name.not_blank" }
Run Code Online (Sandbox Code Playgroud)

翻译文件

# validators.en.yml
author.name.not_blank: Please enter an author name.
Run Code Online (Sandbox Code Playgroud)

但是如何将参数传递给翻译文件,例如我想传递所需的最小或最大长度?

author.name.min_length: "Required length: %limit% characters."
Run Code Online (Sandbox Code Playgroud)

validation translation internationalization symfony

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

如何检查表格是否有错误?

除了直接附加到表单字段的表单字段特定错误消息,我想在表单上方显示表单包含错误的消息.

如果表单有错误,我该如何签入Symfony3 twig模板?有曾经是这样的事情在Symfony2中:

{% if form.get('errors') is not empty %}
    <div class="error">Your form has errors. Please check fields below.</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

但这在Symfony3中不起作用.有任何想法吗?(form.vars.errors不起作用.)

forms error-handling symfony

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

如何更改应用程序在heroku平台中使用的php版本?

我正在尝试将我的 heroku 应用程序使用的 PHP 版本从默认的 7.1 更改为 7.0。当我尝试在其中定义它时,composer.json它会被忽略。我需要做什么?

php heroku composer-php

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

我怎样才能获得明天00h10的时间戳?

为了防止误解:我的所有代码行都很好,并且它们正常工作.我只是在我的错误参数中date()显示秒数date('H:s'),它应该显示分钟数date('H:i').(感谢chumkiu提示.)


我想在00h10获取即将到来的一天的时间戳.

我以为我可以使用这个strtotime()功能,例如

$timestamp = strtotime('tomorrow 00:10');
Run Code Online (Sandbox Code Playgroud)

但是当我检查

$mydate = date('Y-m-d H:s', $timestamp);
var_dump($mydate);
Run Code Online (Sandbox Code Playgroud)

输出是

string(16) "2013-10-03 00:00"
Run Code Online (Sandbox Code Playgroud)

文档中strtotime()有很多例子如何获得不同的时间

echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
Run Code Online (Sandbox Code Playgroud)

但他们都没有接近我的问题.

有趣的是:我能做到这一点

$time_h = strtotime('tomorrow +10 hours');
$time_m = strtotime('tomorrow +10 minutes');
Run Code Online (Sandbox Code Playgroud)

$time_h返回想要的结果( …

php time date

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

如何在setInterval中暂停和重新启动动画?

我写了一个小代码,从屏幕顶部滑下来的图像.我有一个暂停按钮来清除超时.但是我无法阻止JS动画并从停止的同一个地方继续.

的jsfiddle-实施例

Code :
$.fn.pSlide = function(options) {
        var icount = 0,interval;
        var isPaused = false;
        documentHeight  = $('.image-container').height(),
        documentWidth   = $('.image-container').width(),
        imageHeight = 250;
        imageWidth = 250;
        defaults = {
            minSize     : 5,
            maxSize     : 15,
            newOn       : 8000, //controls duration of each element
        },
        options = $.extend({}, defaults, options);

        $('#control-btn').click(function() {

            window.clearInterval(interval);
        });

        interval = window.setInterval(function() {
            if(!isPaused) {
                var $elm = $('.image-container img').eq(icount);
                var startPositionLeft   = Math.random() * documentWidth - imageWidth ,
                startOpacity        = 0.5 + Math.random(), …
Run Code Online (Sandbox Code Playgroud)

javascript jquery

5
推荐指数
1
解决办法
192
查看次数

我应该使用 ² 还是 &lt;sup&gt;2&lt;/sup&gt;

考虑到基于机器的可读性(但不是唯一的,请在相关时提出建议),使用

square²
Run Code Online (Sandbox Code Playgroud)

或者

square<sup>2</sup>
Run Code Online (Sandbox Code Playgroud)

在我的 HTML 文件中(使用 utf-8 编码)?

html

5
推荐指数
1
解决办法
3263
查看次数