小编Jes*_*ica的帖子

Doctrine加入两个具有单表继承的模型,第二个连接减慢速度

我有3个模型使用单表继承.它们适用于可在我们网站上购买的三种不同类型的商品.这些项目被分类,因此Category模型具有用于映射这三种类型中的每一种的属性.

当使用简单的选择来获取所有类别,然后在类别中显示它们的名称和每种类型的项目的数量时,Doctrine总共执行369个查询,总共549毫秒.(一个用于类别列表,然后一个用于类别中的每个类型.)

所以我开始在查询中添加联接以消除所有额外的查询.它适用于第一个项目类型,主查询运行在101.80毫秒.(根据Symfony Profiler工具栏)

$this->_em->createQueryBuilder()
        ->select([$alias, 'courses'])
        ->from($this->_entityName, $alias)
        ->leftJoin("{$alias}.courses", 'courses');
Run Code Online (Sandbox Code Playgroud)

只要我添加第二个连接,查询就会减慢到24050.14毫秒

$qb = $this->_em->createQueryBuilder()
        ->select([$alias, 'courses', 'bundles'])
        ->from($this->_entityName, $alias)
        ->leftJoin("{$alias}.courses", 'courses')
        ->leftJoin("{$alias}.bundles", 'bundles');
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过第三次加入,担心它会让服务器崩溃.

真正奇怪的是,如果我使用Doctrine查询记录并获得确切的查询,并在我的数据库上手动运行它,它只运行0.2秒.

该表在所有FK列和鉴别器列上都有索引.

任何建议将不胜感激.谢谢!

编辑:4/3

我必须让分支回到其他问题的工作点才能回到这个问题.

SQL小提琴与架构(减去其他未在这种情况下加载的表的FK):http://sqlfiddle.com/#!28/85051

所以,我有没有连接的页面,并且它在820.38毫秒内进行了382次查询以进行延迟加载.当我手动加入,而不是依赖延迟加载,它以130为21159(这是唯一加盟模式2,所以它仍然懒加载第三)

$qb = $this->_em->createQueryBuilder()
        ->select([$alias, 'courses', 'bundles'])
        ->from($this->_entityName, $alias)
        ->leftJoin("{$alias}.courses", 'courses')
        ->leftJoin("{$alias}.bundles", 'bundles');
Run Code Online (Sandbox Code Playgroud)

这是来自Symfony工具栏的查询(20241.26 ms)

    SELECT 
  i0_.description AS description0, 
  i0_.id AS id1, 
  i0_.name AS name2, 
  i0_.created_at AS created_at3, 
  i0_.updated_at AS updated_at4, 
  i0_.display_order AS display_order5, 
  i1_.atccode AS atccode6, 
  i1_.version AS version7, 
  i1_.description AS description8, 
  i1_.online_price AS online_price9, …
Run Code Online (Sandbox Code Playgroud)

php mysql single-table-inheritance symfony doctrine-orm

9
推荐指数
1
解决办法
1770
查看次数

Sonata Admin List View,制作更多标题排序按钮?

我有一个Admin类,它有listFields的这个定义:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
            ->addIdentifier('type')
            ->add('created_at', 'datetime')
            ->add('updated_at', 'datetime')
            ->add('created_by')
            ->add('updated_by')
            ->add('is_active')
            ->add('is_deleted')
            ->add('_action', 'actions',
                    array(
                'actions' => array(
                    'view' => array(),
                    'edit' => array(),
                    'delete' => array()
                )
            ))
    ;

}
Run Code Online (Sandbox Code Playgroud)

只有"类型"列是可排序的 - IE,当您将鼠标悬停在"类型"的表头上时,您会看到一个asc/desc箭头,并且可以单击以根据此列重新排序行.

如何让它显示在更多列上?

我尝试添加sortable = true但是它正在尝试加入另一个实体.

php sorting symfony symfony-sonata sonata-admin

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

Symfony FOSUserBundle Translations未显示

我使用命令行界面在config.yml中启用了Translator服务,清除了缓存并安装了资产.

我的登录页面仍然显示"security.login.submit".我正在使用自定义模板,该模板位于:app/Resources/FOSUserBundle/views/Security/login.html.twig并包含(从FOS提供的模板复制):

{{ 'security.login.submit'|trans }}
Run Code Online (Sandbox Code Playgroud)

我的config.yml:

framework:
    translator:      { fallback: "%locale%" }
    default_locale:  "%locale%"
Run Code Online (Sandbox Code Playgroud)

parameters.yml:

parameters:
    locale: en
Run Code Online (Sandbox Code Playgroud)

php symfony fosuserbundle

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

允许" - "和"." 在preg_replace中

$username = preg_replace("/[^\p{L}|\p{N}]/u", "", html_entity_decode($username));
Run Code Online (Sandbox Code Playgroud)

这允许"字母"和"数字" $username,删除其他一切.

但是我怎样才能在混合中使用 "."点符号呢?也会"-"很好.

非常感谢你!

php regex preg-replace preg-match

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

在xPath中的单元格中选择多个元素之一

我正在使用Behat,我正在尝试选择一些表单元素.

我的HTML如下 - 基本上我有两个必填字段,一个是输入,一个是textarea,还有一个复选框.

<table class="table">
    <thead>
        <tr>
            <th>Delete</th>
            <th>Question</th>
            <th>Reference</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="delete" /></td>
            <td><textarea name="question" required="required"></textarea></td>
            <td><input type="text" required="required" name="reference" /></td>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

获取表单元素的xpath选择器是:

 //table/tbody/tr/td/input
Run Code Online (Sandbox Code Playgroud)

这显然适用于输入 - 但是当我添加textarea并尝试检查它时,它找不到textarea,因为,它不是输入.

我试过这个://table/tbody/tr/td/(input or textarea)和使用"或",|等的几种变体我无法弄清楚如何指定多种类型的元素来尝试匹配.

提前致谢!:)

html php forms xpath behat

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

PHP中从JSON中随机选择项目

我有一个像这样的 JSON 字符串:

[{"Format":"I25","Content":"172284201241"},  {"Format":"I25","Content":"40124139"},
{"Format":"I25","Content":"20197086185689"},
{"Format":"I25","Content":"10215887"},
{"Format":"I25","Content":"702666712272"},
{"Format":"QRCODE","Content":"3"}]
Run Code Online (Sandbox Code Playgroud)

我只想随机选择其中一项,例如:

{"Format":"I25","Content":"40124139"}
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 PHP 做到这一点?

php arrays json

-3
推荐指数
1
解决办法
5182
查看次数