Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP实体类生成器_Php_Mysql_Oop - Fatal编程技术网

PHP实体类生成器

PHP实体类生成器,php,mysql,oop,Php,Mysql,Oop,我正在创建实体(实体视图控制器的)(换句话说,MVC的模型)类,这些类在理论上与我拥有的数据库表相匹配。是否有一个工具可以读取mysql表并创建模型类代码?(不是在执行时,需要代码输出) 我希望输出像 class{ public $columnname1; public $columnname2; public $columnname3; public $columnname4; public $columnname5; public $columnname6; function __const

我正在创建实体(实体视图控制器的)(换句话说,MVC的模型)类,这些类在理论上与我拥有的数据库表相匹配。是否有一个工具可以读取mysql表并创建模型类代码?(不是在执行时,需要代码输出) 我希望输出像

class{
public $columnname1;
public $columnname2;
public $columnname3;
public $columnname4;
public $columnname5;
public $columnname6;
function __construct(&$columnname1, &$columnname2){...}
function insert(&$columnname1, &$columnname2){}
function delete(&$columnname1){}
...
}
一个工具,也将创建插入,更新和删除的id函数将帮助我很多

这个工具可以是免费的,也可以是付费的。

那怎么办?它完全按照你说的做,你得到了一个非常好的框架

symfony根据您提供的数据模型为您“编译”类。它将确保编译的类和MySQL数据库结构是同步的

这种方法优于基于
反射的方法,因为它太慢了。

PDO可以

设计一个与数据库/查询结构匹配的类,并使用
PDO::FETCH_INTO
将结果集提取到一个已经实例化的对象中。误读了这个问题,我的错


要从数据库结构生成类本身,有几个项目(我还没有测试,但这是一个非常简单的搜索)


    • 我知道你在找ORM之类的东西

      希望这有帮助


      是的,教条是你需要的

    • 运行一个命令,您将获得XML或YML格式的所有表元数据(由您选择)

      $php应用程序/控制台原则:映射:转换xml./src/Bundle/Resources/config/doctor/metadata/orm--from数据库--force

    • 生成元数据后,命令导入模式以构建所需的相关实体类。您将在其中找到所有获取和设置功能(阅读选择更新插入

      1.$php应用程序/控制台原则:映射:导入包注释

      2.$php应用程序/控制台原则:生成:实体包

    • 允许您使用以下代码处理现有表:

      $user=new DB\SQL\Mapper($db,'users');
      // or $user=new DB\Mongo\Mapper($db,'users');
      // or $user=new DB\Jig\Mapper($db,'users');
      $user->userID='jane';
      $user->password=md5('secret');
      $user->visits=0;
      $user->save();
      

      上面的代码在users表中创建了新记录,下面的代码是我很长时间以来用来为MySQL和DB2表创建PHP模型的代码。我已经准备好了MSSQL、PGSQL和SQLite的存根,但从未需要完成它们

      下面是代码生成器类:

      <?php
      /**
       * @license http://opensource.org/licenses/MIT The MIT License
       * @version 1.0.0_20130220000000
       */
      
      /**
       * This class will generate PHP source code for a "model" that interfaces with 
       * a database table.
       * 
       * @license http://opensource.org/licenses/MIT The MIT License
       * @version 1.0.0_20130220000000
       */
      class db_code_generator{
          private $closing_tag;
          private $columns;
          private $database;
          private $host;
          private $password;
          private $port;
          private $table;
          private $type;
          private $username;
      
          /**
           * Constructor. By default we will try to connect to a MySQL database on 
           * localhost.
           * 
           * @param string $database The name of the database the user wants to connect
           * to.
           * 
           * @param string $table The name of the table to generate code for.
           * 
           * @param string $username The username we should use to connect to the 
           * database.
           * 
           * @param string $password The password we need to connect to the database.
           * 
           * @param string $host The host or server we will try to connect to. If the 
           * user doesn't give us a host we default to localhost.
           * 
           * @param string $port The port we should try to connect to. Typically this 
           * will not be passed so we default to NULL.
           * 
           * @param string $type The type of database we are connecting to. Valid 
           * values are: db2, mssql, mysql, pgsql, sqlite.
           */
          public function __construct($database = NULL,
                                               $table = NULL,
                                               $username = NULL,
                                               $password = NULL,
                                               $host = 'localhost',
                                               $type = 'mysql',
                                               $port = NULL,
                                               $closing_tag = TRUE){
              $this->database = $database;
              $this->table = $table;
              $this->username = $username;
              $this->password = $password;
              $this->host = $host;
              $this->port = $port;
              $this->type = $type;
              $this->closing_tag = $closing_tag;
          }
      
          /**
           * Generate the code for a model that represents a record in a table.
           * 
           * @return string The PHP code generated for this model.
           */
          public function get_code(){
              $this->get_data_definition();
              $code = $this->get_file_head();
              $code .= $this->get_properties();
              $code .= $this->get_ctor();
              $code .= $this->get_dtor();
              $code .= $this->get_method_stubs();
              $code .= $this->get_file_foot();
              return $code;
          }
      
          /**
           * Create the code needed for the __construct function.
           * 
           * @return string The PHP code for the __construct function.
           */
          private function get_ctor(){
              $code = "\t/**\n";
              $code .= "\t * Constructor.\n";
              $code .= "\t *\n";
              $code .= "\t * @param mixed \$id The unique id for a record in this table. Defaults to NULL\n";
              if ('db2' === $this->type){
                  $code .= "\n\t * @param string \$library The library where the physical file resides. Defaults to LIBRARY\n";
              }
              $code .= "\t *\n";
              $code .= "\t * @see base_$this->type::__construct\n";
              $code .= "\t */\n";
              if ('db2' === $this->type){
                  $code .= "\tpublic function __construct(\$id = NULL, \$library = 'LIBRARY'){\n";
                  $code .= "\t\tparent::__construct(\$id, \$library);\n";
              }else{
                  $code .= "\tpublic function __construct(\$id = NULL){\n";
                  $code .= "\t\tparent::__construct(\$id);\n";
              }
              $code .= "\t}\n\n";
              return $code;
          }
      
          /**
           * Connect to the requested database and get the data definition for the
           * requested table.
           */
          private function get_data_definition(){
              try{
                  switch ($this->type){
                      case 'db2':
                          $this->get_data_definition_db2();
                          break;
                      case 'mssql':
                          $this->get_data_definition_mssql();
                          break;
                      case 'mysql':
                          $this->get_data_definition_mysql();
                          break;
                      case 'pgsql':
                          $this->get_data_definition_pgsql();
                          break;
                      case 'sqlite':
                          $this->get_data_definition_sqlite();
                          break;
                  }
              }catch(PDOException $e){
              }
          }
      
          /**
           * Get data definition information for a DB2 table.
           */
          private function get_data_definition_db2(){
              $con = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$this->host;PROTOCOL=TCPIP", $this->username, $this->password);
              $sql = "SELECT COLUMN_NAME, COLUMN_SIZE, COLUMN_TEXT, DECIMAL_DIGITS, ORDINAL_POSITION, TYPE_NAME FROM SYSIBM.SQLCOLUMNS WHERE TABLE_SCHEM = '". strtoupper($this->database) ."' AND TABLE_NAME = '". strtoupper($this->table) ."'";
              $statement = $con->prepare($sql);
              if ($statement->execute()){
                  while ($row = $statement->fetch()){
                      if (NULL !== $row['DECIMAL_DIGITS']){
                          $decimal = $row['DECIMAL_DIGITS'];
                      }else{
                          $decimal = NULL;
                      }
                      if ('DECIMAL' === $row['TYPE_NAME'] && NULL !== $row['DECIMAL_DIGITS'] && '0' !== $row['DECIMAL_DIGITS']){
                          $type = 'float';
                      }else if ('DECIMAL' === $row['TYPE_NAME']){
                          $type = 'integer';
                      }else{
                          $type = strtolower($row['TYPE_NAME']);
                      }
                      if ('1' === $row['ORDINAL_POSITION']){
                          $key = 'PRI';
                      }else{
                          $key = NULL;
                      }
                      $this->columns[$row['COLUMN_NAME']] = array('allow_null' => TRUE,
                                                                                'decimal' => $decimal,
                                                                                'default' => NULL,
                                                                                'extra' => NULL,
                                                                                'key' => $key,
                                                                                'length' => $row['COLUMN_SIZE'],
                                                                                'name' => $row['COLUMN_NAME'],
                                                                                'text' => $row['COLUMN_TEXT'],
                                                                                'type' => $type);
                  }
                  ksort($this->columns);
              }
          }
      
          /**
           * Get data definition information for a MS SQL table.
           */
          private function get_data_definition_mssql(){
              return "The code for generating MS SQL models is not yet implemented.\n";
          }
      
          /**
           * Get data definition information for a MySQL table.
           */
          private function get_data_definition_mysql(){
              $dsn = "mysql:host=$this->host;";
              if (NULL !== $this->port){
                  $dsn .= "port=$this->port;";
              }
              $dsn .= "dbname=$this->database";
              $con = new PDO($dsn, $this->username, $this->password);
              $sql = "SHOW COLUMNS FROM $this->table";
              $statement = $con->prepare($sql);
              if ($statement->execute()){
                  while ($row = $statement->fetch()){
                      $this->columns[$row['Field']] = array('allow_null' => $row['Null'],
                                                                        'decimal' => NULL,
                                                                        'default' => $row['Default'],
                                                                        'extra' => $row['Extra'],
                                                                        'key' => $row['Key'],
                                                                        'length' => NULL,
                                                                        'name' => $row['Field'],
                                                                        'text' => NULL,
                                                                        'type' => $row['Type']);
                  }
                  ksort($this->columns);
              }
          }
      
          /**
           * Get data definition information for a PostgreSQL table.
           */
          private function get_data_definition_pgsql(){
              return "The code for generating PostgreSQL models is not yet implemented.\n";
          }
      
          /**
           * Get data definition information for a SQLite table.
           */
          private function get_data_definition_sqlite(){
              return "The code for generating SQLite models is not yet implemented.\n";
          }
      
          /**
           * Create the code needed for the __destruct function.
           * 
           * @return string The PHP code for the __destruct function.
           */
          private function get_dtor(){
              $code = "\t/**\n";
              $code .= "\t * Destructor.\n";
              $code .= "\t */\n";
              $code .= "\tpublic function __destruct(){\n";
              $code .= "\t\tparent::__destruct();\n";
              $code .= "\t}\n\n";
              return $code;
          }
      
          /**
           * Generate the code found at the end of the file - the closing brace, the 
           * ending PHP tag and a new line. Some PHP programmers prefer to not have a 
           * closing PHP tag while others want the closing tag and trailing newline - 
           * it probably just depends on their programming background. Regardless it's 
           * best to let everyone have things the way they want.
           */
          private function get_file_foot(){
              $code = '';
              if ($this->closing_tag){
                  $code .= "}\n?>\n";
              }else{
                  $code .= '}';
              }
              return $code;
          }
      
          /**
           * Generate the code found at the beginning of the file - the PHPDocumentor 
           * doc block, the require_once for the correct base class and the class name.
           * 
           * @return string The code generated for the beginning of the file.
           */
          private function get_file_head(){
              $code  = "<?php\n";
              $code .= "/**\n";
              $code .= " * Please enter a description of this class.\n";
              $code .= " *\n";
              $code .= " * @author XXX <XXX@domain.com>\n";
              $code .= " * @copyright Copyright (c) ". date('Y') ."\n";
              $code .= " * @license http://www.gnu.org/licenses/gpl-3.0.html GPLv3\n";
              $code .= " * @version ". date('Ymd') ."\n";
              $code .= " */\n\n";
              $code .= "require_once('base_$this->type.php');\n\n";
              $code .= "class ". strtolower($this->table) ." extends base_$this->type{\n";
              return $code;
          }
      
          /**
           * Generate the code for a delete method stub.
           * 
           * @return string The PHP code for the method stub.
           */
          private function get_method_stub_delete(){
              $code  = "\t/**\n";
              $code .= "\t * Override the delete method found in the base class.\n";
              $code .= "\t *\n";
              $code .= "\t * @param mixed \$id The unique record ID to be deleted.\n";
              $code .= "\t *\n";
              $code .= "\t * @return bool TRUE if a record was successfully deleted from the table, FALSE otherwise.\n";
              $code .= "\t */\n";
              $code .= "\tpublic function delete(\$id){\n";
              $code .= "\t\treturn parent::delete(\$id);\n";
              $code .= "\t}\n\n";
              return $code;
          }
      
          /**
           * Generate the code for an insert method stub.
           * 
           * @return string The PHP code for the method stub.
           */
          private function get_method_stub_insert(){
              $code  = "\t/**\n";
              $code .= "\t * Override the insert method found in the base class.\n";
              $code .= "\t *\n";
              $code .= "\t * @param array \$parms An array of data, probably the \$_POST array.\n";
              $code .= "\t * @param bool \$get_insert_id A flag indicating if we should get the autoincrement value of the record just created.\n";
              $code .= "\t *\n";
              $code .= "\t * @return bool TRUE if a record was successfully inserted into the table, FALSE otherwise.\n";
              $code .= "\t */\n";
              $code .= "\tpublic function insert(\$parms, \$get_insert_id = FALSE){\n";
              $code .= "\t\treturn parent::insert(\$parms, \$get_insert_id);\n";
              $code .= "\t}\n\n";
              return $code;
          }
      
          /**
           * Generate the code for an update method stub.
           * 
           * @return string The PHP code for the method stub.
           */
          private function get_method_stub_update(){
              $code  = "\t/**\n";
              $code .= "\t * Override the update method found in the base class.\n";
              $code .= "\t *\n";
              $code .= "\t * @param array &\$parms An array of key=>value pairs - most likely the \$_POST array.\n";
              $code .= "\t *\n";
              $code .= "\t * @param integer \$limit The number of records to update. Defaults to NULL.\n";
              $code .= "\t *\n";
              $code .= "\t * @return bool TRUE if a record was successfully updated, FALSE otherwise.\n";
              $code .= "\t */\n";
              $code .= "\tpublic function update(\$parms, \$limit = NULL){\n";
              $code .= "\t\treturn parent::update(\$parms, \$limit);\n";
              $code .= "\t}\n\n";
              return $code;
          }
      
          /**
           * Create method stubs for create, delete and update.
           * 
           * @return string The PHP code for these stubs.
           */
          private function get_method_stubs(){
              $code = $this->get_method_stub_delete();
              $code .= $this->get_method_stub_insert();
              $code .= $this->get_method_stub_update();
              return $code;
          }
      
          private function get_properties(){
              $code = '';
              if (count($this->columns)){
                  foreach ($this->columns AS $index => $col){
                      $code .= "\t/**\n";
                      if (NULL !== $col['text']){
                          $code .= "\t * $col[text]\n";
                      }else{
                          $code .= "\t * Description\n";
                      }
                      $code .= "\t * @var ". $col['type'];
                      if (NULL !== $col['length']){
                          $code .= " ($col[length]";
                          if (NULL !== $col['decimal']){
                              $code .= ",$col[decimal]";
                          }
                          $code .= ")";
                      }
                      $code .= "\n\t */\n";
                      $temp_name = str_replace('#', '_', $col['name']);
                      $code .= "\tpublic \$$temp_name;\n\n";
                  }
              }
              return $code;
          }
      }
      ?>
      
      为了它的价值,分享代码


      不过,我强烈建议使用ORM。将MySQL结构转换回数据库抽象层一点也不好…

      我认为您应该在自己的基础上进行改进。在我看来,模型代码的每个项目和要求都是不同的。两个mysql查询将使您轻松

    • SHOW TABLES FROM db\u NAME//这给出了表列表,因此它的主循环器
    • DESC tbl\u name//获取给定表的列信息的详细查询
    • DESC tbl_name
      将给出字段、类型、空值、键、默认值和额外列

      e、 g.管道(|)中分开的值:

      Id | int(11)| NO | PRI | NULL |自动增量|


      我按照这些方法制作了支持Codeigniter 2中CRUD操作的模型、控制器和查看器文件。它工作得很好。

      我已经编写了一个PHP代码,它将自动检测MYSQL数据库中的所有数据库,在选择任何一个数据库时,它的所有相关表都将被加载。您可以选择所有表或任何相应的表来生成模态类

      以下是指向我的存储库的链接

      这将自动创建实体文件夹,并将所有实体类转储到该文件夹中

      注意-目前仅支持MYSQL

      希望能有帮助。快乐编码

      试试这个

      我为MySQL数据库的对象关系映射构建了一个有用的实用程序

      该实用工具自动为给定数据库模式的任何表生成PHP类


      该软件包是从我的个人PHP Web MVC框架中提取的。

      我正在寻找一个自动完成该功能的解决方案,因为它可以自动完成。我知道如何做所有这些,比如懂数学和买计算器等等,你想从表中生成类吗?是的,就像我在使用netbeans的问题中所说的,我想我现在试试db2ppp,看起来很有用还有另一种方法,签出。还有一个类似的,但也有,这可能就是你要找的:。这可能很有趣:。但该功能仍然是实验性的。@mogria我希望导出的文本文件(php或其他)作为输出。强烈建议您采用另一种方法:首先设计您的模型,然后,您的数据访问和数据库表应该基于模型。@NazarMerza是什么让这不仅仅是个人偏好?我宁愿自动生成基本数据并处理我的数据。是的,如果您已经建立了标准,基本CRUD总是相似的。我想我的行不清楚,但重点是,这两个查询将为您提供表列信息,这可以用来生成MVC类和文件。您还可以共享base_mysql类吗?@Grynn-
      base_mysql
      类超过700行,它的父类(
      base
      )大约有650行。我很乐意把它们发电子邮件给你或别的什么。电子邮件会很棒的(vishal)。doshi@gmail.com)或者您可以将其粘贴到gist.github.com。我很乐意用您的代码(当然是您的代码)制作一个github或任何项目-因此它是可维护的…@Grynn-电子邮件已经发送。您好,我很高兴收到这个@clashnco@gmail.com“条令:映射”命名空间中未定义任何命令
      <?php
      /**
       * @license GPLv3 (http://www.gnu.org/licenses/gpl-3.0.html)
       * @version 1.0.0_20130220000000
       */
      
      require_once('db_code_generator.php');
      
      $table_type = array();
      $table_type['db2'] = 'DB2/400 (db2)';
      $table_type['mssql'] = 'Microsoft SQL Server (mssql)';
      $table_type['mysql'] = 'MySQL (mysql)';
      $table_type['pgsql'] = 'PostGRESQL (pgsql)';
      $table_type['sqlite'] = 'SQLite (sqlite)';
      
      $database = (isset($_POST['database'])) ? $_POST['database'] : 'my_database';
      $host = (isset($_POST['host'])) ? $_POST['host'] : 'localhost';
      $username = (isset($_POST['username'])) ? $_POST['username'] : 'root';
      $password = (isset($_POST['password'])) ? $_POST['password'] : '';
      $table = (isset($_POST['table'])) ? $_POST['table'] : '';
      $type = (isset($_POST['type'])) ? $_POST['type'] : 'mysql';
      
      $library = (isset($_POST['library'])) ? $_POST['library'] : 'LIBRARY';
      $file = (isset($_POST['file'])) ? $_POST['file'] : 'STATES';
      //---------------------------------------------------------------------------
      ?>
      <div class="data_input">
          <form action="" method="post">
              <fieldset class="top">
                  <legend>Code Generator</legend>
                  <label for="host">Hostname or IP:
                  <input id="host" maxlength="32" name="host" tabindex="<?php echo $tabindex++; ?>" title="Enter the database host name" type="text" value="<?php echo $host; ?>" />
                  </label>
                  <br />
      
                  <label for="username">Username:
                  <input id="username" maxlength="32" name="username" tabindex="<?php echo $tabindex++; ?>" title="Enter the database username" type="text" value="<?php echo $username; ?>" />
                  </label>
                  <br />
      
                  <label for="password">Password:
                  <input id="password" maxlength="32" name="password" tabindex="<?php echo $tabindex++; ?>" title="Enter the database password" type="password" value="<?php echo $password; ?>" />
                  </label>
                  <br />
      
                  <label for="type">Type:
                  <select id="type" name="type" tabindex="<?php echo $tabindex++; ?>">
                      <?php
                      foreach ($table_type AS $key=>$value){
                          echo('<option ');
                          if ($key == $type){
                              echo 'selected="selected" ';
                          }
                          echo 'value="'. $key .'">'. $value .'</option>';
                      }
                      ?>
                  </select>
                  </label>
                  <br />
      
              </fieldset>
      
              <fieldset class="top">
                  <legend>PostGRESQL/MSSQL/MySQL Parameters</legend>
      
                  <label for="database">Database:
                  <input id="database" maxlength="100" name="database" tabindex="<?php echo $tabindex++; ?>" title="Enter the database name" type="text" value="<?php echo $database; ?>" />
                  </label>
                  <br />
      
                  <label for="table">Table:
                  <input id="table" maxlength="100" name="table" tabindex="<?php echo $tabindex++; ?>" title="Enter the table name" type="text" value="<?php echo $table; ?>" />
                  </label>
                  <br />
      
              </fieldset>
              <fieldset class="top">
                  <legend>DB2 Parameters</legend>
      
                  <label for="library">Library:
                  <input id="library" maxlength="10" name="library" tabindex="<?php echo $tabindex++; ?>" title="Enter the library name" type="text" value="<?php echo $library; ?>" />
                  </label>
                  <br />
      
                  <label for="file">Physical File:
                  <input id="file" maxlength="10" name="file" tabindex="<?php echo $tabindex++; ?>" title="Enter the file name" type="text" value="<?php echo $file; ?>" />
                  </label>
                  <br />
      
              </fieldset>
              <fieldset class="bottom">
                  <button tabindex="<?php echo $tabindex++; ?>" type="submit">Generate!</button>
              </fieldset>
          </form>
      </div>
      <?php
      
      if (isset($_POST['host'])){
          if ('db2' == $_POST['type']){
              $_POST['database'] = strtoupper($_POST['library']); // Library
              $_POST['table'] = strtoupper($_POST['file']); // Physical file
              $_POST['host'] = 'db2_host';
              $_POST['username'] = 'db2_username';
              $_POST['password'] = 'db2_password';
          }
          $object = new db_code_generator($_POST['database'], $_POST['table'], $_POST['username'], $_POST['password'], $_POST['host'], $_POST['type']);
          echo('<textarea rows="75" style="margin-left : 50px; width : 90%;" onfocus="select()">'. $object->get_code() .'</textarea>');
      }
      ?>