================================
WHAT I'M TRYING TO DO:
================================
I have three tables: photos, galleries, tags.
In Catalyst, I'm trying to retrieve photo info by 
searching on photos, joined to their tags, and joined
to the galleries table that the photo's filesystem 
location. 
================================
MY APPROACH (I'm open to another, if there's a better way)
================================
I *think* I need to search on photos table, and join galleries
and tags; but I can't seem to get the syntax right, or 
I've done some silly thing in my setup.

I've tried variations of this, to no avail:

my $photo_obj = $c->model('CatapultDB::Photos')->search(
                { 
                 'tags.tag' => "$tag", 
                },
                { 
                  join => [qw/ tags galleries /],
                }
                )->page($page);

================================
SCHEMA DETAILS:
================================
CREATE TABLE Photos (
  id           SERIAL      NOT NULL PRIMARY KEY,
  gallery      INTEGER NOT NULL
                    references Galleries(id)
                    ON DELETE CASCADE,
  name         VARCHAR(150) NOT NULL,
  filename     VARCHAR(150) NOT NULL,
);

In Photos class:
__PACKAGE__->belongs_to("gallery", 
"Catapult::Schema::CatapultDB::Galleries", 
{ id => "gallery" });
__PACKAGE__->has_many("tags", 
"Catapult::Schema::CatapultDB::Tags", 
{ "foreign.photo" => "self.id" });
================================
CREATE TABLE tags (
  id           SERIAL  NOT NULL PRIMARY KEY,
  photo        INTEGER REFERENCES photos(id)
                    ON DELETE RESTRICT,
  tag          VARCHAR(100) NOT NULL
);

In Tags class
__PACKAGE__->belongs_to("photos", 
"Catapult::Schema::CatapultDB::Photos", 
{ id => "photo" });
================================
CREATE TABLE Galleries (
  id           SERIAL        NOT NULL PRIMARY KEY,
  name         VARCHAR (150) UNIQUE NOT NULL,
  directory    VARCHAR(50)   UNIQUE NOT NULL,
);

In GAlleries class:
__PACKAGE__->has_many("photos", 
"Catapult::Schema::CatapultDB::Photos", 
{ "foreign.gallery" => "self.id" },
);

NOTE, I have found that this query works in psql:

SELECT *
FROM photos
JOIN galleries
ON photos.gallery = galleries.id
JOIN tags
ON photos.id = tags.photo
WHERE tags.tag = 'sunshine';

/dennis


_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to