[prev] [thread] [next] [Date index for 2004/08/14]
I'm following the documentation on CPAN and I'm having problems getting a simple one-to-many relationship figured out. Basically, every time I insert into the parent table, then insert into the child table, it's giving me the error:
Can't insert new Store::LineItem: DBD::mysql::st execute failed: Column 'order_id' cannot be null [for statement ``INSERT INTO sf_order_line_items (color, product_id, order_id, price, qty, size)
VALUES (?, ?, ?, ?, ?, ?)
''])
None of the documentation (that I have found) specifies (when inserting a child)how to tell the class what value to use for the foriegn key. So I'm not passing an order_id, even though it's required (shouldn't it deduce that from the fact that I'm calling it from the parent class?). No matter what I specify for the order_id, I still get the same error. I've tried 'NULL', undef, any integer, anything, I always get that error.
I'm assuming I set up the relationship wrong somehow, so here is my code in hopes that you can give a bit of help.
<code>
#==============================================================================
package Store::LineItem;
use base 'Store::DBI';
Store::LineItem->table('sf_order_line_items');
Store::LineItem->columns(qw(
id order_id product_id qty price color size custom_opts
));
Store::LineItem->has_a(order_id => 'Store::Order');
#==============================================================================
package Store::Order;
use base 'Store::DBI';
# This is here to emulate the default placed_on = NOW()
__PACKAGE__->add_trigger(before_create => sub {
my $class = shift;
return unless $class->find_column('placed_on');
$class->placed_on($class->get_current_time());
});
Store::Order->table('sf_orders');
Store::Order->columns(qw(
id transaction_id auth_msg successful card_number exp_date amount
billto_fname billto_lname billto_address billto_city billto_state
billto_zip billto_country billto_phone shipto_fname shipto_lname
shipto_address shipto_city shipto_state shipto_zip shipto_country
shipto_phone placed_on shipped_on backordered_on canceled_on company_id
customer_id cart_id shipping_method shipping_cost tax tracking_no
shipped_by deleted gift gift_message affiliate_id affiliate_paid
shipto_company giftcert_id credit_used printed promo_id promo_amount cv2
authorizedotnet_code authorizedotnet_captured authorizedotnet_txid
remote_addr
));
Store::Order->has_many(line_items => 'Store::LineItem');
</code>
And then in the main perl script I have:
<code>
use TestOrder;
my $o = Store::Order->create({
cart_id => '898996',
transaction_id => '823498723498',
successful => 1,
card_number => '1234123412341234',
exp_date => 1104,
amount => 50.99,
billto_fname => 'Brian',
billto_lname => 'Lozier',
billto_address => '123 Happy Street',
billto_city => 'Belfair',
billto_state => 'WA',
billto_zip => '98528',
billto_country => 'USA',
billto_phone => '1231231234',
company_id => 1198,
customer_id => 125998,
shipping_method => 'Standard',
shipping_cost => 5.00,
tax => 0.00,
deleted => 0,
gift => 0,
cv2 => 123,
authorizedotnet_captured => 0
});
my $l = $o->add_to_line_items({
order_id => 5, # No matter what I set this to, I get the error - even if I remove it completely!
product_id => 73856,
qty => 1,
price => 45.99,
color => 'green',
size => 'ML'
});
</code>
Any help would be greatly appreciated.
|
Having Problems Creating Simple Relationship
|
|
Re: Having Problems Creating Simple Relationship
|
Generated at 11:34 on 01 Dec 2004 by mariachi v0.52