当前位置: 首页 > 面试题库 >

如何在symfony2中设置表前缀

费秦迟
2023-03-14
问题内容

像问题主题一样,如何在symfony2中设置默认表前缀?

如果可以为所有实体默认设置最佳设置,但可以选择对单个实体进行覆盖。


问题答案:

自己弄清楚了这一点之后,我想对如何实现这一点有所启发。

Symfony 2和Doctrine 2.1
注:我使用YML进行配置,这就是我要显示的内容。

  1. 打开捆绑包的 Resources / config / services.yml

  2. 定义表前缀参数:
    确保更改 mybundle 和 _myprefix__

    parameters:
    mybundle.db.table_prefix: myprefix_
    
  3. 添加新服务:

services:
mybundle.tblprefix_subscriber:
    class: MyBundle\Subscriber\TablePrefixSubscriber
    arguments: [%mybundle.db.table_prefix%]
    tags:
        - { name: doctrine.event_subscriber }
  1. 创建 MyBundle \ Subscriber \ TablePrefixSubscriber.php
<?php
namespace MyBundle\Subscriber;

use Doctrine\ORM\Event\LoadClassMetadataEventArgs;

class TablePrefixSubscriber implements \Doctrine\Common\EventSubscriber
{
protected $prefix = '';

public function __construct($prefix)
{
    $this->prefix = (string) $prefix;
}

public function getSubscribedEvents()
{
    return array('loadClassMetadata');
}

public function loadClassMetadata(LoadClassMetadataEventArgs $args)
{
    $classMetadata = $args->getClassMetadata();
    if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
        // if we are in an inheritance hierarchy, only apply this once
        return;
    }

    $classMetadata->setTableName($this->prefix . $classMetadata->getTableName());

    foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
        if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY 
                && array_key_exists('name', $classMetadata->associationMappings[$fieldName]['joinTable']) ) {     // Check if "joinTable" exists, it can be null if this field is the reverse side of a ManyToMany relationship
            $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
            $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
        }
    }
}       
}


 类似资料:
  • 问题内容: 有没有一种简单的方法可以为文本表单字段设置默认值? 问题答案: 可以在创建过程中轻松使用:

  • 问题内容: 如何使用in 将 属性设置为表单? 像这样: 我希望属性设置为 日历的 此字段 __ 问题答案: 您可以从树枝模板执行此操作:

  • 本文向大家介绍symfony2 安装或设置,包括了symfony2 安装或设置的使用技巧和注意事项,需要的朋友参考一下 示例 Symfony框架-由symfony组件构建,是用于创建健壮的网站和Web应用程序的领先PHP框架之一。 可以通过两种推荐的方式快速安装Symfony。 官方文档建议通过Symfony Installer安装框架, Symfony Installer是一个很小的php应用程

  • 本文向大家介绍如何在HTML中设置表格宽度?,包括了如何在HTML中设置表格宽度?的使用技巧和注意事项,需要的朋友参考一下 要设置HTML中的表格宽度,请使用style属性。style属性指定元素的内联样式。该属性与HTML <table>标记一起使用,具有CSS属性的宽度。HTML5不支持<table>的width属性,因此CSS属性width与style属性一起用于设置表宽度。 请记住,样式属

  • 我正在尝试使用yml格式将列添加到现有表中。将新列条目添加到.yml文件中,并运行命令生成实体 通过运行该命令,得到一个错误 这是我的yml文件:

  • 我正在构建一个移动Web应用程序,它从我构建的Symfony2应用程序中获取信息。用户必须提交一个表单才能查看信息,但是当我通过AJAX提交表单时,处理它的控制器看不到正在提交的表单。 移动应用程序是用Cordova构建的,因此表单来源于静态HTML表单。一旦通过AJAX提交,AJAX将返回所需的数据。然而,表单提交很好,这让AJAX发挥了神奇的作用,但是Symfony2没有看到表单被提交。我对