Browse Source

Merge pull request #1976 from neoascetic/more_fluent_eloquent

Even more fluent eloquent model via magic setters
Taylor Otwell 11 years ago
parent
commit
86fc0ca7cb
2 changed files with 18 additions and 4 deletions
  1. 4 3
      laravel/database/eloquent/model.php
  2. 14 1
      laravel/tests/cases/eloquent.test.php

+ 4 - 3
laravel/database/eloquent/model.php

@@ -441,7 +441,7 @@ abstract class Model {
 	}
 	}
 
 
 	/**
 	/**
-	 *Updates the timestamp on the model and immediately saves it.
+	 * Updates the timestamp on the model and immediately saves it.
 	 *
 	 *
 	 * @return void
 	 * @return void
 	 */
 	 */
@@ -562,11 +562,12 @@ abstract class Model {
 	 *
 	 *
 	 * @param  string  $key
 	 * @param  string  $key
 	 * @param  mixed   $value
 	 * @param  mixed   $value
-	 * @return void
+	 * @return Model
 	 */
 	 */
 	public function set_attribute($key, $value)
 	public function set_attribute($key, $value)
 	{
 	{
 		$this->attributes[$key] = $value;
 		$this->attributes[$key] = $value;
+		return $this;
 	}
 	}
 
 
 	/**
 	/**
@@ -769,7 +770,7 @@ abstract class Model {
 		}
 		}
 		elseif (starts_with($method, 'set_'))
 		elseif (starts_with($method, 'set_'))
 		{
 		{
-			$this->set_attribute(substr($method, 4), $parameters[0]);
+			return $this->set_attribute(substr($method, 4), $parameters[0]);
 		}
 		}
 
 
 		// Finally we will assume that the method is actually the beginning of a
 		// Finally we will assume that the method is actually the beginning of a

+ 14 - 1
laravel/tests/cases/eloquent.test.php

@@ -133,6 +133,19 @@ class EloquentTest extends PHPUnit_Framework_TestCase {
 		Model::$accessible = null;
 		Model::$accessible = null;
 	}
 	}
 
 
+	/**
+	 * Test the Model::__set method allows chaining.
+	 *
+	 * @group laravel
+	 */
+	public function testAttributeMagicSetterMethodAllowsChaining()
+	{
+		$model = new Model;
+		$this->assertInstanceOf('Model', $model->set_foo('foo'));
+		$model->set_bar('bar')->set_baz('baz');
+		$this->assertEquals(array('foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz'), $model->to_array());
+	}
+
 	/**
 	/**
 	 * Test the Model::__get method.
 	 * Test the Model::__get method.
 	 *
 	 *
@@ -288,4 +301,4 @@ class EloquentTest extends PHPUnit_Framework_TestCase {
 
 
 	}
 	}
 
 
-}
+}