I have what I suppose is a 3-level model relationship.  I have a
vendors table that is "extended" by a commercial_vendors table.  A
commercial_vendor "is-a" vendor so the commercial_vendors table's
primary key is vendor_id which is also a foreign key referencing the
vendors table's id field.  Additionally, all vendors of any "subtype"
have an address. Since other domain entities also have addresses, I've
normalized that data into its own table cleverly called "addresses".
The vendors table, then, has an address_id field that is a foreign key
referencing addresses.id.

The key table structure looks like this:

addresses
   id (PK)
   street_address_1
   ...
   zip_code

vendors
   id (PK)
   address_id (FK)
   business_name
   ...
   created
   updated

commercial_vendors
   vendor_id (PK,FK)
   type
   ...

The model associations, in turn, are defined as:

Address hasOne Vendor
Vendor hasOne CommercialVendor
CommercialVendor belongsTo Vendor

I tried creating a relationship where Vendor belongsTo Address, but
when the scaffolding couldn't handle it (it errored trying to find
addresses.vendor_id, as I recall), I figured I'd done something I
shouldn't.

Given all of that, I have my users creating a new commercial vendor
through /commercial_vendors/apply whose form action is /
commercial_vendors/add.  When, in my CommercialVendor model, I try to
$this->CommercialVendor->saveAll ( $this->data ), I get a foreign key
error. Seems Cake can't save my Vendor because the foreign key to
addresses fails.  Here's my form code in views/commercial_vendors/
apply.ctp:

<?php echo $form->create ( 'CommercialVendor' ) . "\n"; ?>

<fieldset class="first">
        <legend>Applicant Information</legend>

        <?php
                echo $form->input ( 'Vendor.business_name' ) . "\n";
                echo $form->input ( 'Address.street_address_1' ) . "\n";
                echo $form->input ( 'Address.street_address_2' ) . "\n";
                echo $form->input ( 'Address.city' ) . "\n";
                echo $form->input ( 'Address.state' ) . "\n";
                echo $form->input ( 'Address.zip_code' ) . "\n\n";

                echo $form->input ( 'Vendor.applicant_title' ) . "\n";
                echo $form->input ( 'Vendor.applicant_first_name' ) . "\n";
                echo $form->input ( 'Vendor.applicant_last_name' ) . "\n";
                echo $form->input ( 'Vendor.email' ) . "\n";
                echo $form->input ( 'Vendor.phone_number' ) . "\n";
        ?>
</fieldset>

<?php
        echo $form->end (
                array (
                        'label' => 'Apply',
                        'id' => 'commercial-vendor-save'
                )
        );
?>

Am I doing something wrong in my associations or am I asking more than
I should of saveAll()? I realize that there's no commercial vendor
info in the form. I'm trying to do this one step at a time so I can be
sure I understand the problems as they arise.

Thanks for your time.

Rob
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to