Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^3: Querying data with and & or when using DBIx::Class

by Your Mother (Chancellor)
on Sep 17, 2013 at 14:31 UTC ( #1054453=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Querying data with and & or when using DBIx::Class
in thread Querying data with and & or when using DBIx::Class

So, what's going on here is you're using a string in place of a(n anonymous) hash.

$whrcls = "ID => $id, color => $color1";

Should be-

$whrcls = { ID => $id, color => $color1 }; # OR something like my %params = ( ID => $id, color => $color1 ); $whrcls = \%params;

It looks like you might be using some global variables and non-standard code structures (method instead of plain sub). Globals are going to tend to come back and bite you. Definitely avoid them. Non-standard stuff like method signatures has a dearth of examples and help and can come with really deep and difficult edge case bugs. I don't want to put you off that necessarily but if you're having a little trouble with Perl syntax it might not be the best place to jump in.


Comment on Re^3: Querying data with and & or when using DBIx::Class
Select or Download Code
Replies are listed 'Best First'.
Re^4: Querying data with and & or when using DBIx::Class
by phildeman (Acolyte) on Sep 17, 2013 at 20:31 UTC
    Thanks again for your response.

    I am using MooseX.

    The issue is resolved. Instead of building the WHERE clause in $whrcls, I simply added the complete DBIx::Class search within the if/else statement:

    method get_colors( $id, $color1, $color2 ){
        my @mycolor_objs;
        if(!$color2){
            @mycolor_objs = $schema->resultset( 'TblColors' )->search({ ID => $id, color => $color1 },
                                    { order_by => 'ID' });
        }
        else {
            @myscolor_objs = $schema->resultset( 'TblColors' )->search({ ID => $id,
                                    -or => [ color => $color1, color => $color2 ] },
                                    { order_by => 'ID' });
        }
    }

    I am unsure at this moment, but it seems DBIx::Class is a little sensitive when using a scalar to represent the hash being passed as the WHERE clause. Thanks again. When I have a little more time, I will research building WHERE clauses with scalars.

      it seems DBIx::Class is a little sensitive when using a scalar...

      Don't confuse scalar for string just because a scalar often holds strings. They aren't the same. A hash ref can be put into a scalar ( my $hash_ref = \%some_hash or my $x = {}) and hash refs are the only kind of argument DBIC takes for its search and options clauses: never strings. There is no way to (safely and reliably) separate out the bind values and parse the intention of the tree from a string. Compare your original with what is necessary-

      print "ID => $id, color => $color1", $/; print { ID => $id, color => $color1 }, $/;
Re^4: Querying data with and & or when using DBIx::Class
by phildeman (Acolyte) on Sep 17, 2013 at 20:35 UTC
    Thanks again for your response.

    I am using MooseX.

    The issue is resolved. Instead of building the WHERE clause in $whrcls, I simply added the complete DBIx::Class search within the if/else statement:

    method get_colors( $id, $color1, $color2 ){
        my @mycolor_objs;
        if(!$color2){
            @mycolor_objs = $schema->resultset( 'TblColors' )->search({ ID => $id, color => $color1 },
                                    { order_by => 'ID' });
        }
        else {
            @myscolor_objs = $schema->resultset( 'TblColors' )->search({ ID => $id,
                                    -or => [ color => $color1, color => $color2 ] },
                                    { order_by => 'ID' });
        }
    }

    I am unsure at this moment, but it seems DBIx::Class is a little sensitive when using a scalar to represent the hash being passed as the WHERE clause.

    Thanks again. When I have a little more time, I will research building WHERE clauses with scalars.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1054453]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (18)
As of 2015-07-28 19:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (258 votes), past polls