[Catalyst] many_to_many relationship always deletes then inserts
edencardim at gmail.com
Sat Jan 3 12:39:23 GMT 2009
On Fri, Jan 2, 2009 at 7:40 PM, David Schmidt <davewood at gmx.at> wrote:
> Hello list
> I have a M:N relationship where each project can have many pictures
> and vice-versa.
> (projects) ---* (picture_projects) *--- (pictures)
> If I edit a project I present the user a list of all pictures with
> previously selected ones beeing pre-selected.
> In the formfu config file I add all entries (pictures is the
> many_to_many relationship of the Project DBIx Schema)
> __PACKAGE__->many_to_many( pictures => 'picture_projects', 'picture_id');
> model: 'DB::Projects'
> - type: Select
> name: pictures
> label: Pictures
> When I edit a Project and save it all entries in picture_projects with
> project_id of the edited project are deleted and then reinserted.
> But what I want is to only delete them if i actually removed them in
> the editing process.
> DELETE FROM picture_projects WHERE ( project_id = ? ): '3'
> INSERT INTO picture_projects (picture_id, project_id) VALUES (?, ?): '2', '3'
> INSERT INTO picture_projects (picture_id, project_id) VALUES (?, ?): '3', '3'
> I would be very pleased about getting help here since I just redid the
> entire application and ran into the same problem again.
FormFu is using the set_pictures method that is generated by DBIC for
m2m rels and there's probably no better generic implementation for it
other than delete + reinsert. If you want your own specialized logic
you can override the set_pictures method.
Eden Cardim Need help with your Catalyst or DBIx::Class project?
Code Monkey http://www.shadowcat.co.uk/catalyst/
Shadowcat Systems Ltd. Want a managed development or deployment platform?
More information about the Catalyst