summaryrefslogtreecommitdiff
path: root/kohana/libraries/ORM.php
diff options
context:
space:
mode:
Diffstat (limited to 'kohana/libraries/ORM.php')
-rw-r--r--kohana/libraries/ORM.php34
1 files changed, 22 insertions, 12 deletions
diff --git a/kohana/libraries/ORM.php b/kohana/libraries/ORM.php
index 4cbec50a..ae214649 100644
--- a/kohana/libraries/ORM.php
+++ b/kohana/libraries/ORM.php
@@ -319,8 +319,9 @@ class ORM_Core {
elseif (in_array($column, $this->has_many))
{
// one<>many relationship
- return $this->related[$column] = ORM::factory(inflector::singular($column))
- ->where($this->foreign_key($column, $column), $this->object[$this->primary_key])
+ $model = ORM::factory(inflector::singular($column));
+ return $this->related[$column] = $model
+ ->where($this->foreign_key($column, $model->table_name), $this->object[$this->primary_key])
->find_all();
}
elseif (in_array($column, $this->has_and_belongs_to_many))
@@ -638,10 +639,10 @@ class ORM_Core {
*/
public function validate(Validation $array, $save = FALSE)
{
+ $safe_array = $array->safe_array();
+
if ( ! $array->submitted())
{
- $safe_array = $array->safe_array();
-
foreach ($safe_array as $key => $value)
{
// Get the value from this object
@@ -661,12 +662,16 @@ class ORM_Core {
// Validate the array
if ($status = $array->validate())
{
- $safe_array = $array->safe_array();
+ // Grab only set fields (excludes missing data, unlike safe_array)
+ $fields = $array->as_array();
- foreach ($safe_array as $key => $value)
+ foreach ($fields as $key => $value)
{
- // Set new data
- $this->$key = $value;
+ if (isset($safe_array[$key]))
+ {
+ // Set new data, ignoring any missing fields or fields without rules
+ $this->$key = $value;
+ }
}
if ($save === TRUE OR is_string($save))
@@ -840,7 +845,7 @@ class ORM_Core {
elseif (is_null($ids))
{
// Delete all records
- $this->db->where(TRUE);
+ $this->db->where('1=1');
}
else
{
@@ -902,7 +907,7 @@ class ORM_Core {
else
{
// Load table columns
- ORM::$column_cache[$this->object_name] = $this->table_columns = $this->db->list_fields($this->table_name, TRUE);
+ ORM::$column_cache[$this->object_name] = $this->table_columns = $this->list_fields();
}
}
@@ -1021,11 +1026,16 @@ class ORM_Core {
/**
* Proxy method to Database list_fields.
*
- * @param string table name
+ * @param string table name or NULL to use this table
* @return array
*/
- public function list_fields($table)
+ public function list_fields($table = NULL)
{
+ if ($table === NULL)
+ {
+ $table = $this->table_name;
+ }
+
// Proxy to database
return $this->db->list_fields($table);
}