/** * * @param unknown $column * @param unknown $referenceTable * @param unknown $referenceColumn * @param unknown $update * @param unknown $delete */ public function __construct($column, $referenceTable, $referenceColumn, $update, $delete) { // r = raiz // d = destino $nameReferenceTable = $referenceTable; if ($referenceTable instanceof TableIdentifier) { $nameReferenceTable = $referenceTable->getTable(); $referenceTable = "{$referenceTable->getSchema()}.{$referenceTable->getTable()}"; } $name = "{$nameReferenceTable}_r{$column}_d{$referenceColumn}_fkey"; $this->setOnUpdateRule(strtoupper($update)); $this->setOnDeleteRule(strtoupper($delete)); parent::__construct($name, $column, $referenceTable, $referenceColumn); }
/** * * * @param unknown $model */ function air2_model_prevalidate(&$model) { $table = $model->getTable(); $col_defs = $table->getColumns(); $now = air2_date(); foreach ($col_defs as $col => $def) { if (preg_match('/_uuid$/', $col) && isset($def['unique']) && $def['unique']) { if (!isset($model->{$col}) || !strlen($model->{$col})) { $model->{$col} = air2_generate_uuid(12); } } elseif (preg_match('/_cre_dtim$/', $col)) { if (!$model->exists() && !strlen($model->{$col})) { $model->{$col} = $now; } } elseif (preg_match('/_upd_dtim$/', $col)) { $model->{$col} = $now; } elseif (preg_match('/_cre_user$/', $col)) { if (!$model->exists() && !strlen($model->{$col})) { if (defined('AIR2_REMOTE_USER_ID')) { $model->{$col} = AIR2_REMOTE_USER_ID; } else { $model->{$col} = 1; //sysuser -- TODO: check for shell users } } } elseif (preg_match('/_upd_user$/', $col)) { if (defined('AIR2_REMOTE_USER_ID')) { $model->{$col} = AIR2_REMOTE_USER_ID; } else { $model->{$col} = 1; //sysuser -- TODO: check for shell users } } elseif ($def['type'] === 'timestamp') { // validate the string for non cre/upd timestamps if (isset($model->{$col}) && !is_null($model->{$col})) { //NOTE: whenever you set a column in Doctrine, it checks that //the value has changed. Since '2010-01-01 01:01:01' is equal //to '2010-01-01T01:01:01', we need to NULL it first if (strpos($model->{$col}, 'T') !== false) { $airformat = air2_date(strtotime($model->{$col})); $model->{$col} = null; $model->{$col} = $airformat; } } } elseif ($def['type'] === 'date') { // validate the string for non cre/upd timestamps if (isset($model->{$col}) && !is_null($model->{$col})) { //NOTE: whenever you set a column in Doctrine, it checks that //the value has changed. Since '2010-01-01 01:01:01' is equal //to '2010-01-01T01:01:01', we need to NULL it first if (strpos($model->{$col}, 'T') !== false) { $airformat = air2_date(strtotime($model->{$col})); $model->{$col} = null; $model->{$col} = $airformat; } } } // default values if (strlen($table->getDefaultValueOf($col)) && !strlen($model->{$col})) { $model->{$col} = $table->getDefaultValueOf($col); } // lastly, check strings for valid UTF8 chars if ($def['type'] === 'string' && !Encoding::is_utf8($model->{$col})) { $modelname = get_class($model); throw new Doctrine_Exception("non-UTF8 string found in {$modelname}->{$col}: " . $model->{$col}); } } }
/** * Query scope for filtering data by category Ids * @param unknown $model * @param string $values */ public function byTag($model, $values = '') { if (!$values) { $values = $this->getValue(); } $table = $model instanceof Model ? $model->getTable() : $model->getModel()->getTable(); return $model->join('product_to_tag', function ($join) use($table, $values) { $join->on($table . '.id', '=', 'product_to_tag.product_pk_id'); $join->whereIn('product_to_tag.product_tag_pk_id', $values); }); }