Exemple #1
0
 /**
  * erase all model data, handle with care
  * @param null $db
  * @param null $table
  */
 public static function setdown($db = null, $table = null)
 {
     $self = get_called_class();
     if (is_null($db) || is_null($table)) {
         $df = $self::resolveConfiguration();
     }
     if (!is_object($db = is_string($db = $db ?: $df['db']) ? \Base::instance()->get($db) : $db)) {
         trigger_error(self::E_CONNECTION);
     }
     if (strlen($table = strtolower($table ?: $df['table'])) == 0) {
         trigger_error(self::E_NO_TABLE);
     }
     if (isset($df) && !empty($df['fieldConf'])) {
         $fields = $df['fieldConf'];
     } else {
         $fields = array();
     }
     $deletable = array();
     $deletable[] = $table;
     foreach ($fields as $key => $field) {
         $field = static::resolveRelationConf($field);
         if (array_key_exists('has-many', $field)) {
             if (!is_array($relConf = $field['has-many'])) {
                 continue;
             }
             $rel = $relConf[0]::resolveConfiguration();
             // check if foreign conf matches m:m
             if (array_key_exists($relConf[1], $rel['fieldConf']) && !is_null($relConf[1]) && key($rel['fieldConf'][$relConf[1]]) == 'has-many') {
                 // compute mm table name
                 $deletable[] = isset($relConf[2]) ? $relConf[2] : static::getMMTableName($rel['table'], $relConf[1], $table, $key, $rel['fieldConf'][$relConf[1]]['has-many']);
             }
         }
     }
     if ($db instanceof Jig) {
         /** @var Jig $db */
         $dir = $db->dir();
         foreach ($deletable as $item) {
             if (file_exists($dir . $item)) {
                 unlink($dir . $item);
             }
         }
     } elseif ($db instanceof SQL) {
         /** @var SQL $db */
         $schema = new Schema($db);
         $tables = $schema->getTables();
         foreach ($deletable as $item) {
             if (in_array($item, $tables)) {
                 $schema->dropTable($item);
             }
         }
     } elseif ($db instanceof Mongo) {
         /** @var Mongo $db */
         foreach ($deletable as $item) {
             $db->selectCollection($item)->drop();
         }
     }
 }