Updates from lnApp

This commit is contained in:
Deon George
2011-07-14 08:59:32 +10:00
parent 5c9750e957
commit 46c3b9a075
31 changed files with 991 additions and 434 deletions

View File

@@ -214,7 +214,7 @@ class Kohana_Database_Query {
// Set the cache key based on the database instance name and SQL
$cache_key = 'Database::query("'.$db.'", "'.$sql.'")';
if ($result = Kohana::cache($cache_key, NULL, $this->_lifetime))
if (! is_null($result = Kohana::cache($cache_key, NULL, $this->_lifetime)))
{
// Return a cached result
return new Database_Result_Cached($result, $sql, $this->_as_object, $this->_object_params);

View File

@@ -110,6 +110,10 @@ abstract class Kohana_Database_Query_Builder extends Database_Query {
// Quote the min and max value
$value = $min.' AND '.$max;
}
elseif ($op === 'IN' AND is_array($value))
{
$value = $db->quote($value);
}
elseif ((is_string($value) AND array_key_exists($value, $this->_parameters)) === FALSE)
{
// Quote the value, it is not a parameter

View File

@@ -235,6 +235,15 @@ class Kohana_ORM extends Model implements serializable {
*/
protected $_table_names_plural = TRUE;
// Suppress ORMs inclusion of <table_name>.*
protected $_disable_wild_select = FALSE;
// Suppress ORMs inclusion of <table_name>. to column joins
protected $_disable_join_table_name = FALSE;
// Suppress ORMs use of limit
protected $_disable_limit = FALSE;
/**
* Model configuration, reload on wakeup?
* @var bool
@@ -314,7 +323,7 @@ class Kohana_ORM extends Model implements serializable {
else
{
// Passing the primary key
$this->where($this->_table_name.'.'.$this->_primary_key, '=', $id)->find();
$this->where(($this->_disable_join_table_name ? '' : $this->_table_name.'.').$this->_primary_key, '=', $id)->find();
}
}
elseif ( ! empty($this->_cast_data))
@@ -368,13 +377,14 @@ class Kohana_ORM extends Model implements serializable {
{
$defaults['model'] = $alias;
$defaults['foreign_key'] = $this->_object_name.$this->_foreign_key_suffix;
$defaults['far_key'] = Inflector::singular($alias).$this->_foreign_key_suffix;
$this->_has_one[$alias] = array_merge($defaults, $details);
}
foreach ($this->_has_many as $alias => $details)
{
$defaults['model'] = Inflector::singular($alias);
$defaults['model'] = $this->_model_names_plural ? Inflector::singular($alias) : $alias;
$defaults['foreign_key'] = $this->_object_name.$this->_foreign_key_suffix;
$defaults['through'] = NULL;
$defaults['far_key'] = Inflector::singular($alias).$this->_foreign_key_suffix;
@@ -630,7 +640,7 @@ class Kohana_ORM extends Model implements serializable {
$model = $this->_related($column);
// Use this model's column and foreign model's primary key
$col = $model->_table_name.'.'.$model->_primary_key;
$col = ($this->_disable_join_table_name ? '' : $model->_table_name.'.').$model->_primary_key;
$val = $this->_object[$this->_belongs_to[$column]['foreign_key']];
$model->where($col, '=', $val)->find();
@@ -641,9 +651,23 @@ class Kohana_ORM extends Model implements serializable {
{
$model = $this->_related($column);
// Use this model's primary key value and foreign model's column
$col = $model->_table_name.'.'.$this->_has_one[$column]['foreign_key'];
$val = $this->pk();
if (! is_array($this->_has_one[$column]['foreign_key']))
{
// Use this model's primary key value and foreign model's column
$col = ($this->_disable_join_table_name ? '' : $model->_table_name.'.').$this->_has_one[$column]['foreign_key'];
$val = $this->_object[$this->_has_one[$column]['far_key']];
}
else
{
foreach ($this->_has_one[$column]['foreign_key'] as $fk)
{
// Simple has_many relationship, search where target model's foreign key is this model's primary key
$col = ($this->_disable_join_table_name ? '' : $model->_table_name.'.').$fk;
$val = $this->_object[$fk];
$model = $model->where($col, '=', $val);
}
}
$model->where($col, '=', $val)->find();
@@ -653,29 +677,52 @@ class Kohana_ORM extends Model implements serializable {
{
$model = ORM::factory($this->_has_many[$column]['model']);
if (isset($this->_has_many[$column]['through']))
if (! is_array($this->_has_many[$column]['foreign_key']))
{
// Grab has_many "through" relationship table
$through = $this->_has_many[$column]['through'];
if (isset($this->_has_many[$column]['through']))
{
// Grab has_many "through" relationship table
$through = $this->_has_many[$column]['through'];
// Join on through model's target foreign key (far_key) and target model's primary key
$join_col1 = $through.'.'.$this->_has_many[$column]['far_key'];
$join_col2 = $model->_table_name.'.'.$model->_primary_key;
// Join on through model's target foreign key (far_key) and target model's primary key
$join_col1 = ($this->_disable_join_table_name ? '' : $through.'.').$this->_has_many[$column]['far_key'];
$join_col2 = ($this->_disable_join_table_name ? '' : $model->_table_name.'.').$model->_primary_key;
$model->join($through)->on($join_col1, '=', $join_col2);
$model->join($through)->on($join_col1, '=', $join_col2);
// Through table's source foreign key (foreign_key) should be this model's primary key
$col = $through.'.'.$this->_has_many[$column]['foreign_key'];
$val = $this->pk();
// Through table's source foreign key (foreign_key) should be this model's primary key
$col = ($this->_disable_join_table_name ? '' : $through.'.').$this->_has_many[$column]['foreign_key'];
$val = $this->pk();
}
else
{
// Simple has_many relationship, search where target model's foreign key is this model's primary key
$col = ($this->_disable_join_table_name ? '' : $model->_table_name.'.').$this->_has_many[$column]['foreign_key'];
$val = $this->_object[$this->_has_many[$column]['far_key']];
}
return $model->where($col, '=', $val);
}
else
{
// Simple has_many relationship, search where target model's foreign key is this model's primary key
$col = $model->_table_name.'.'.$this->_has_many[$column]['foreign_key'];
$val = $this->pk();
}
foreach ($this->_has_many[$column]['foreign_key'] as $mk => $fk)
{
if (isset($this->_has_many[$column]['through']))
{
throw new Kohana_Exception('This code hasnt been written yet!');
}
else
{
// Simple has_many relationship, search where target model's foreign key is this model's primary key
$col = ($this->_disable_join_table_name ? '' : $model->_table_name.'.').$fk;
$val = $this->_object[$mk];
}
return $model->where($col, '=', $val);
$model = $model->where($col, '=', $val);
}
return $model;
}
}
else
{
@@ -999,14 +1046,15 @@ class Kohana_ORM extends Model implements serializable {
{
$this->_db_builder->from($this->_table_name);
if ($multiple === FALSE)
if ($multiple === FALSE AND ! $this->_disable_limit)
{
// Only fetch 1 record
$this->_db_builder->limit(1);
}
// Select all columns by default
$this->_db_builder->select($this->_table_name.'.*');
if (! $this->_disable_wild_select)
$this->_db_builder->select($this->_table_name.'.*');
if ( ! isset($this->_db_applied['order_by']) AND ! empty($this->_sorting))
{
@@ -1015,7 +1063,7 @@ class Kohana_ORM extends Model implements serializable {
if (strpos($column, '.') === FALSE)
{
// Sorting column for use in JOINs
$column = $this->_table_name.'.'.$column;
$column = ($this->_disable_join_table_name ? '' : $this->_table_name.'.').$column;
}
$this->_db_builder->order_by($column, $direction);