Browse Source

Removed add_ magic method from eloquent model as this will be a 3.2 feature.

Taylor Otwell 12 years ago
parent
commit
ba4d1a89c8

+ 28 - 0
laravel/blade.php

@@ -17,6 +17,8 @@ class Blade {
 		'structure_closings',
 		'else',
 		'includes',
+		'render_each',
+		'render',
 		'yields',
 		'yield_sections',
 		'section_start',
@@ -265,6 +267,32 @@ class Blade {
 		return preg_replace($pattern, '$1<?php echo view$2->with(get_defined_vars()); ?>', $value);
 	}
 
+	/**
+	 * Rewrites Blade @render statements into valid PHP.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected static function compile_render($value)
+	{
+		$pattern = static::matcher('render');
+
+		return preg_replace($pattern, '$1<?php echo render$2; ?>', $value);
+	}
+
+	/**
+	 * Rewrites Blade @render_each statements into valid PHP.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected static function compile_render_each($value)
+	{
+		$pattern = static::matcher('render_each');
+
+		return preg_replace($pattern, '$1<?php echo render_each$2; ?>', $value);
+	}
+
 	/**
 	 * Rewrites Blade @yield statements into Section statements.
 	 *

+ 29 - 11
laravel/database/eloquent/model.php

@@ -136,9 +136,9 @@ abstract class Model {
 			}
 		}
 
-		// If the original attribute values have not been set, we will set them to
-		// the values passed to this method allowing us to quickly check if the
-		// model has changed since hydration of the original instance.
+		// If the original attribute values have not been set, we will set
+		// them to the values passed to this method allowing us to easily
+		// check if the model has changed since hydration.
 		if (count($this->original) === 0)
 		{
 			$this->original = $this->attributes;
@@ -308,6 +308,32 @@ abstract class Model {
 		return new Has_Many_And_Belongs_To($this, $model, $table, $foreign, $other);
 	}
 
+	/**
+	 * Save the model and all of its relations to the database.
+	 *
+	 * @return bool
+	 */
+	public function push()
+	{
+		$this->save();
+
+		// To sync all of the relationships to the database, we will simply spin through
+		// the relationships, calling the "push" method on each of the models in that
+		// given relationship, this should ensure that each model is saved.
+		foreach ($this->relationships as $name => $models)
+		{
+			if ( ! is_array($models))
+			{
+				$models = array($models);
+			}
+
+			foreach ($models as $model)
+			{
+				$model->push();
+			}
+		}
+	}
+
 	/**
 	 * Save the model instance to the database.
 	 *
@@ -612,14 +638,6 @@ abstract class Model {
 			$this->attributes[substr($method, 4)] = $parameters[0];
 		}
 
-		// If the method begins with "add_", we will assume that the developer is
-		// adding a related model instance to the model. This is useful for
-		// adding all of the related models and then saving at once.
-		elseif (starts_with($method, 'add_'))
-		{
-			$this->relationships[substr($method, 4)][] = $parameters[0];
-		}
-
 		// Finally we will assume that the method is actually the beginning of a
 		// query, such as "where", and will create a new query instance and
 		// call the method on the query instance, returning it after.

+ 1 - 1
laravel/database/eloquent/relationships/relationship.php

@@ -96,7 +96,7 @@ abstract class Relationship extends Query {
 	 *
 	 * @return string
 	 */
-	protected function foreign_key()
+	public function foreign_key()
 	{
 		return static::foreign($this->base, $this->foreign);
 	}