Example #1
0
 /**
  * 指定テーブルの外部キーを取得する
  *
  * @param  string $table_name
  * @return array
  */
 protected function getForeignKeys($table_name, $columns = null)
 {
     $fks = [];
     $sql = 'SELECT
           CONSTRAINT_NAME,
           TABLE_NAME,
           COLUMN_NAME,
           REFERENCED_TABLE_NAME,
           REFERENCED_COLUMN_NAME
         FROM information_schema.KEY_COLUMN_USAGE
         WHERE REFERENCED_TABLE_SCHEMA = DATABASE()
           AND REFERENCED_TABLE_NAME IS NOT NULL
           AND TABLE_NAME = ?
         ORDER BY POSITION_IN_UNIQUE_CONSTRAINT';
     $results = $this->db->build($sql, $table_name)->fetchAll();
     foreach ($results as $result) {
         if (!is_null($columns) && !in_array($result->COLUMN_NAME, $columns)) {
             continue;
         }
         $fk = new ForeignKey();
         $fk->setColumnName($result->COLUMN_NAME)->setRefTableName($result->REFERENCED_TABLE_NAME)->setRefColumnName($result->REFERENCED_COLUMN_NAME)->setConstraint($result->CONSTRAINT_NAME);
         $fks[] = $fk;
     }
     return $fks;
 }