Hi Everyone,
I'm new to the list so bear with me if I'm missing something. I have a foreign key relationship where it's possible that the belongs_to relationship is NULL. See the classes below. When I create a new Smsmessage object e.g. like so:

my $sms2 = $m->resultset('Smsmessages')->create(
        {
                subject => 'Some subject',
                message => 'a message',
                channel_id => $chan2->id,
                #channel_keyword_id => undef,
                inception => scalar localtime(time()),
                expiration => scalar localtime(time() + (60*60*24)),
                sent => 0,
                retries => 0,
                provider_id => $prov->id,
        }
        );

If I leave out the channel_keyword_id => undef field, I will get a defined value for $sms2->channel_keyword. If I trace it, the following select ends up happening:

SELECT me.id, me.okid, me.keyword, me.channel_id FROM channel_keywords me:

Which returns a value that gets plugged the $sms2->channel_keyword field. Is this the expected behavior? The default for this field is defined as undef below. If a value is not specified in the create() shouldn't it be given the default value (in this case NULL and not a random record)? I'm not quite sure I understand what is going on, but it seems like the new value is not getting an equivalent of NULL in the new object unless I explicitly say channel_keyword_id => undef. I understand that it is good practice to set this value to NULL on creation, but I'm wondering if the behavior I'm seeing is to be expected.

Note that if I do set channel_keyword_id => undef, it behaves as expected and $sms2->channel_keyword is NULL.

Thanks,
Damon

#### Begin class with has_many #######
package RTD::Schema::RTDDB::ChannelKeywords;
use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("Core");
__PACKAGE__->table("channel_keywords");
__PACKAGE__->add_columns(
  "id",
{ data_type => "INT", default_value => undef, is_nullable => 0, size => 11 },
  "okid",
{ data_type => "INT", default_value => "", is_nullable => 0, size => 11 },
  "keyword",
  {
    data_type => "VARCHAR",
    default_value => undef,
    is_nullable => 1,
    size => 255,
  },
  "channel_id",
{ data_type => "INT", default_value => "", is_nullable => 0, size => 11 },
);
__PACKAGE__->set_primary_key("id");


__PACKAGE__->belongs_to('channel' => 'RTD::Schema::RTDDB::Channels', 'channel_id');

### This is the one giving me the problem
__PACKAGE__->has_many('smsmessages' => 'RTD::Schema::RTDDB::Smsmessages', 'channel_keyword_id');

########## end class with has many ######

######## begin class with belongs_to #####
package RTD::Schema::RTDDB::Smsmessages;
use strict;
use warnings;
use base 'DBIx::Class';

__PACKAGE__->load_components("Core");
__PACKAGE__->table("smsmessages");
__PACKAGE__->add_columns(
  "id",
{ data_type => "INT", default_value => undef, is_nullable => 0, size => 11 },
  "subject",
  {
    data_type => "VARCHAR",
    default_value => undef,
    is_nullable => 1,
    size => 128,
  },
  "message",
{ data_type => "VARCHAR", default_value => "", is_nullable => 0, size => 5000 },
  "channel_id",
{ data_type => "INT", default_value => 0, is_nullable => 0, size => 11 },
  "inception",
  {
    data_type => "DATETIME",
    default_value => "0000-00-00 00:00:00",
    is_nullable => 0,
    size => 19,
  },
  "expiration",
  {
    data_type => "DATETIME",
    default_value => "0000-00-00 00:00:00",
    is_nullable => 0,
    size => 19,
  },
  "sent",
{ data_type => "TINYINT", default_value => 0, is_nullable => 0, size => 4 },
  "retries",
{ data_type => "TINYINT", default_value => 0, is_nullable => 0, size => 4 },
  "provider_id",
{ data_type => "INT", default_value => 0, is_nullable => 0, size => 11 },
  "created_on",
  {
    data_type => "TIMESTAMP",
    default_value => "CURRENT_TIMESTAMP",
    is_nullable => 1,
    size => 14,
  },
  "updated_on",
  {
    data_type => "TIMESTAMP",
    default_value => "0000-00-00 00:00:00",
    is_nullable => 1,
    size => 14,
  },
  "channel_keyword_id", ### NOTE THE undef
{ data_type => "INT", default_value => undef, is_nullable => 1, size => 11 },
);
__PACKAGE__->set_primary_key("id");


__PACKAGE__->belongs_to('channel' => 'RTD::Schema::RTDDB::Channels', 'channel_id'); __PACKAGE__->belongs_to('provider' => 'RTD::Schema::RTDDB::Providers', 'provider_id');
### This is the one giving me problems
__PACKAGE__->belongs_to('channel_keyword' => 'RTD::Schema::RTDDB::ChannelKeywords', 'channel_keyword_id', {join_type => 'left'});
_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]

Reply via email to