From ba4d1a89c847d7d2420127a4ce79a6633931b6cf Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Mon, 26 Mar 2012 10:56:42 -0500 Subject: [PATCH] Removed add_ magic method from eloquent model as this will be a 3.2 feature. --- laravel/blade.php | 28 +++++++++++++ laravel/database/eloquent/model.php | 40 ++++++++++++++----- .../eloquent/relationships/relationship.php | 2 +- 3 files changed, 58 insertions(+), 12 deletions(-) diff --git a/laravel/blade.php b/laravel/blade.php index c0faf8de..7e6d33c9 100644 --- a/laravel/blade.php +++ b/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 @@ protected static function compile_includes($value) return preg_replace($pattern, '$1with(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', $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', $value); + } + /** * Rewrites Blade @yield statements into Section statements. * diff --git a/laravel/database/eloquent/model.php b/laravel/database/eloquent/model.php index c726be47..763cd46f 100644 --- a/laravel/database/eloquent/model.php +++ b/laravel/database/eloquent/model.php @@ -136,9 +136,9 @@ public function fill($attributes) } } - // 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 @@ public function has_many_and_belongs_to($model, $table = null, $foreign = null, 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 @@ public function __call($method, $parameters) $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. diff --git a/laravel/database/eloquent/relationships/relationship.php b/laravel/database/eloquent/relationships/relationship.php index f6ccc484..84d02362 100644 --- a/laravel/database/eloquent/relationships/relationship.php +++ b/laravel/database/eloquent/relationships/relationship.php @@ -96,7 +96,7 @@ protected function fresh_model($attributes = array()) * * @return string */ - protected function foreign_key() + public function foreign_key() { return static::foreign($this->base, $this->foreign); }