As far as I know, save (opposite to "read" is for a single
model) ..seems you have to implement multiple save
On Dec 20, 9:57 pm, Cake Fan <[EMAIL PROTECTED]> wrote:
> I'm having a relatively simple problem (at least I hope). I'm hoping
> I'm simply not understanding the framework properly, but perhaps
> someone can help me solve my confusion.
>
> The problem I'm having is related to saving data to multiple models in
> one save. Perhaps this idea is voodoo, but in the below code it would
> be highly advantageous to be able save data to both the ZipCode and
> the Business model in the same call to save(). I was hoping it would
> be straightforward with cake 1.2 out of the box by simply setting up
> the hasOne and belongsTo relationship in the models.
>
> Right, now the Business Name seems to work just fine. However, the
> Zip Code doesn't save. See the code below for what I've done, I'll
> discuss what I've tried below the code snippets.
>
> [In the live code, there are a lot more (multiple more hasOne and
> hasMany) relationships than shown below, but I removed many of them
> for clarity]
> ====================================
> ::::::::::::::::BUSINESS MODEL:::::::::::::::::::::::::::
> ------------------------------------------------------------------------
> class Business extends AppModel
> {
> var $useTable = 'businesses';
>
> var $validate = array(
> 'name' => array(
> 'minlength' => array(
> 'rule' => array('minLength', '1'),
> 'message' => 'A Business Name Is Needed!'
> )
> ),
> 'zip_code' => array(
> 'postal' => array(
> 'rule' => array('postal', null, 'us'),
> 'message' => 'Only valid US Zip Codes Allowed!'
> )
> )
> );
>
> var $hasOne = array(
> 'ZipCode' => array(
> 'className' => 'ZipCode',
> 'dependent' => true
> ));
>
> }
>
> ------------------------------------------------------------------------
>
> ====================================
> ::::::::::::::::ZipCode MODEL::::::::::::::::::::::::::::::::
> ------------------------------------------------------------------------
> class ZipCode extends AppModel
> {
> var $useTable = 'zip_codes';
>
> var $belongsTo = array(
> 'Business' => array(
> 'className' => 'Business',
> 'foreignKey' => 'business_id'
> )
> );}
>
> ------------------------------------------------------------------------
>
> ====================================
> ::::::::::::::::Add A BUSINESS VIEW::::::::::::::::::::
> ------------------------------------------------------------------------
> <h2>Add A Business</h2>
> <?php echo $form->create('Business', array('type' => 'post', 'action'
> => 'add', 'id' => 'request-form')); ?>
> <?php echo $form->label('Business.name', 'Business name'); ?>
> <?php echo $form->input('Business.name', array('type' => 'text',
> 'label' => false)); ?>
> <?php echo $form->label('Business.zip_code', 'Zip Code'); ?>
> <?php echo $form->input('Business.zip_code', array('type' =>
> 'text', 'label' => false)); ?>
> <?php echo $form->end('Add It!'); ?>
> ------------------------------------------------------------------------
>
> ====================================
> ::::::::::::::::ADMIN CONTROLLER:::::::::::::::::::::::
> ------------------------------------------------------------------------
> class AdminController extends AppController {
> var $helpers = array('html', 'time', 'javascript', 'ajax');
> var $uses = array('Business','ZipCode');
>
> /** main action (starting point) **/
> function index ()
> {
> $this->pageTitle = 'The Back End';
>
> }
>
> /** main action (starting point) **/
> function add ()
> {
> $this->pageTitle = 'Add A Business';
>
> /** we have a search **/
> if (!empty($this->data)) {
>
> //If the form data can be validated and saved...
> if($this->Business->save($this->data, true,
> array('name','zip_code'))){
>
> //Set a session flash message and redirect.
> $this->Session->setFlash('Business Added!');
> $this->redirect('/admin/index');
> exit(0);
> }
> }
> }
>
> }
>
> ------------------------------------------------------------------------
>
> To get it working, I've tried the following with no successful saves
> of the ZipCode field:
>
> 1) Changing the form Class name:
> <?php echo $form->input('ZipCode.zip_code', array('type' => 'text',
> 'label' => false)); ?>
>
> 2) Changing the controller save call around in various ways:
> if($this->Business->save($this->data, true, array('name','zip_code')))
> if($this->Business->save($this->data['Business'])) ...
>
> Essentially, I would like the data to be saved to both models in one
> call; I have whole lot of models in this particular system, and
> calling a bunch of saves to all the individual models isn't really
> practical.
>
> Thanks for your help in advance!
> CakeFan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" 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
-~----------~----~----~----~------~----~------~--~---