In order to save the related data, you need to use the saveAll method,
or do explicit saves for the related data (both approaches work).

On Dec 23, 4:55 pm, "[email protected]"
<[email protected]> wrote:
> I have 3 tables: recipes, ingredients and ingredients_recipes with
> foreign keys set up. I was under the assumption that due to the
> relationship if I saved my recipe the recipe ingredients would also be
> saved but this is not the case. Would someone please straighten me
> out? Thanks for any help.
>
> class RecipesController extends AppController
> {
>         /*
>                 Make sure that if you add another controller that you put the
> current controller
>                 in the array as well or it wont be found.
>         */
>
>         var $uses = array('Recipe', 'RecipeType', 'Ingredient',
> 'MeasurementType', 'IngredientsRecipes');
>
>         function index()
>         {
>                 $this->set('recipes', $this->Recipe->findAll());
>         }
>
>         function view($id = null)
>         {
>                 $this->Recipe->id = $id;
>                 $this->set('recipe', $this->Recipe->read());
>         }
>
>         function add()
>         {
>                 $this->set_recipe_types();
>                 $this->set_ingredients();
>                 $this->set_measurement_types();
>
>                 if (!empty($this->data))
>                 {
>                         if ($this->Recipe->save($this->data))
>                         {
>                                 $this->flash('Your recipe has been saved.', 
> '/recipes');
>                         }
>                 }
>         }
>
>         function edit($id = null)
>         {
>                 $this->Recipe->id = $id;
>                 $this->set_recipe_types();
>                 if (empty($this->data))
>                 {
>                         $this->data = $this->Recipe->read();
>                 }
>                 else
>                 {
>                         if ($this->Recipe->save($this->data))
>                         {
>                                 $this->flash('Your recipe has been 
> updated.','/recipes');
>                         }
>                 }
>         }
>
>         function delete($id)
>         {
>                 $this->Recipe->del($id);
>                 $this->flash('The recipe with id: '.$id.' has been deleted.', 
> '/
> recipes');
>         }
>
>         private function set_recipe_types()
>         {
>                 $this->set('recipe_types', $this->RecipeType->find('list', 
> array
> ('fields'=>'RecipeType.recipe_type',
> 'order'=>'RecipeType.recipe_type')));
>         }
>
>         private function set_ingredients()
>         {
>                 $this->set('ingredients', $this->Ingredient->find('list', 
> array
> ('fields'=>'ingredient', 'order'=>'ingredient')));
>         }
>
>         private function set_measurement_types()
>         {
>                 $this->set('measurement_types', 
> $this->MeasurementType->find('list',
> array('fields'=>'measurement_type', 'order'=>'measurement_type')));
>         }
>
> }
>
> CREATE TABLE `recipes` (
>   `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
>   `recipe` varchar(64) NOT NULL DEFAULT '',
>   `description` varchar(255) DEFAULT NULL,
>   `nutritional` text,
>   `instructions` text,
>   `servings` int(2) DEFAULT NULL,
>   `recipe_type_id` int(10) unsigned zerofill NOT NULL,
>   `created` datetime DEFAULT NULL,
>   `modified` datetime DEFAULT NULL,
>   PRIMARY KEY (`id`),
>   KEY `FK_recipe_type_id` (`recipe_type_id`),
>   CONSTRAINT `FK_recipe_type_id` FOREIGN KEY (`recipe_type_id`)
> REFERENCES `recipe_types` (`id`)
> ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
>
> CREATE TABLE `ingredients` (
>   `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
>   `ingredient` varchar(64) NOT NULL DEFAULT '',
>   `ingredient_type_id` int(10) unsigned zerofill NOT NULL,
>   `description` varchar(255) DEFAULT NULL,
>   `created` datetime DEFAULT NULL,
>   `modified` datetime DEFAULT NULL,
>   PRIMARY KEY (`id`),
>   UNIQUE KEY `unique_ingredient` (`ingredient`),
>   KEY `ingredient_type_id` (`ingredient_type_id`),
>   CONSTRAINT `ingredient_type_id` FOREIGN KEY (`ingredient_type_id`)
> REFERENCES `ingredient_types` (`id`)
> ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
>
> CREATE TABLE `ingredients_recipes` (
>   `recipe_id` int(10) unsigned zerofill NOT NULL,
>   `ingredient_id` int(10) unsigned zerofill NOT NULL,
>   `amount` int(5) unsigned NOT NULL,
>   `measurement_type_id` int(10) unsigned zerofill NOT NULL,
>   `description` varchar(255) DEFAULT NULL,
>   `created` datetime DEFAULT NULL,
>   `modified` datetime DEFAULT NULL,
>   KEY `FK_ingredients_id` (`ingredient_id`),
>   KEY `FK_measurement_type_id` (`measurement_type_id`),
>   KEY `FK_recipe_id` (`recipe_id`),
>   CONSTRAINT `FK_ingredients_id` FOREIGN KEY (`ingredient_id`)
> REFERENCES `ingredients` (`id`),
>   CONSTRAINT `FK_measurement_type_id` FOREIGN KEY
> (`measurement_type_id`) REFERENCES `measurement_types` (`id`),
>   CONSTRAINT `FK_recipe_id` FOREIGN KEY (`recipe_id`) REFERENCES
> `recipes` (`id`)
> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to