Hi David.

I tried your query, but it doesn't do the trick, but thanks anyway.

I've been digging and found that Delete doesn't allow JOIN.

Thanks again, for your help.

2011/6/16 David Mann <ni...@codingninja.com.au>

> **
> Hey mate,
>
> Give this a shot, don't have ability to test right now though sorry.
> delete VendorBundle:Photo p, bp LEFT JOIN p.bedrooms bp LEFT JOIN
> bp.bedroom b where b.id = 13
>
> The following queries are valid though
>
> if user chose to delete related rows as well, then:
> DELETE
>     p,  # The photo
>     bp, # The relation
>     b   # The bedroom
> FROM
>     photo p
> INNER JOIN
>     bedroom_photo bp # The relation join
> ON
>     bp.id_photo = p.id # On the photos id
> INNER JOIN # The bedroom join
>     bedroom b ON b.id = bp.id_bedroom  # The bedrooms id
> WHERE
>     b.id = 1;
>
> otherwise:
>
> DELETE
>     p, bp
> FROM
>     photo p
> INNER JOIN
>     bedroom_photo bp ON bp.id_photo = p.id
> INNER JOIN
>     bedroom b ON b.id = bp.id_bedroom
> WHERE
>     b.id = 1;
>
>
> Hope this helps!
>
> Regards,*
> David Mann - Coding Ninja*
>
>
> On 6/16/2011 2:04 PM, oscar balladares wrote:
>
> Hi everybody!
>
>  This might go in the Doctrine's mailing list, but knowing you all S2
> people are working with Doctrine 2, I'm feeling
> lucky that you could help me out.
>
>  This is the kind of stuff I want to achieve:
>
>  DQL:  delete VendorBundle:Photo p JOIN p.bedrooms bp JOIN bp.bedroom b
> where b.id = 13
>
>  What debugger say:
>
>  Error: Expected end of string, got 'JOIN'
>
>  A little background:
>
>  I have 3 entities, two are main entities, and the last one is a bridge
> between the firsts.
>
>  1) Bedroom
> 2) Photo
> 3)Bedroom_photo
>
>  bedroom_photo is some sort of the many to many relationship between 1 and
> 2. But 1 and 2 are not associated directly
> like a real many to many because 3 has an extra property. The association
> may be described like a oneToMany-ManyToOne.
>
>  A bedroom can have many photos and a photo can be owned by many bedrooms
> (the client could use a photo to describe many bedrooms).
> This association allow a photo to be uploaded without being explicitly
> related to any bedroom.
>
>  3rd entity's mapping is:
>
>   fields:
>         is_public:
>             type:  boolean
>
>      manyToOne:
>         bedroom:
>             targetEntity:  Vendor\VendorBundle\Entity\Bedroom
>             inversedBy:  photos
>          photo:
>             targetEntity:  Vendor\VendorBundle\Entity\Photo
>             inversedBy:  bedrooms
>
>
>  The associations are bidirectional.
>
>
>  So What I want is if a client tries to delete a bedrooms, prompt him also
> to choose to delete only the photo association info (rows on bedroom_entity)
> or
> to delete actually the associated photos (also delete associated rows on
> photo). I'm stucked trying to find a solution for last problem.
>
>  I also tried:
>
>  DQL: DELETE VendorBundle:Photo p WHERE p.id IN (SELECT ph.id FROM
> VendorBundle:Photo ph JOIN ph.bedrooms  bp JOIN bp.bedroom b WHERE b.id =
> :id)
>
>  Debugger says:
>
>  General error: 1093 You can't specify target table 'foto' for update in
> FROM clause
>
>  That is a known mysql issue. I digged a little bit and found you can't
> update/delete from a table which clause is making reference to it.
>
>  I also tried:
>
>  DQL: DELETE VendorBundle:Photo p WHERE p.id IN (SELECT bp.photo_id FROM
> VendorBundle:BedroomPhoto bp JOIN bp.bedroom b WHERE b.id = :id)
>
>  Error: Class Vendor\VendorBundle\Entity\BedroomPhoto has no field or
> association named photo_id
>
>  This is because the relation between Photo and BedroomPhoto is through a
> mapping: photos, and doctrines doesn't see it as a property (the photo_id
> column).
>
>  How the heck can I delete a bedroom's photos in one query?
>
>  Doing
>
>  foreach(bedroom->getBedroomPhotos() as $bp) {
> $em->remove($bp->getPhoto()); } $em->flush() ;
>
>  That fires 2 queries for each photo that a bedroom has, the first one is
> to remove the photo, and the 2nd to remove the relation on bedroom_photo (I
> have setted
> a cascade deletion on bedroom-bedroomPhoto, but running the code above
> doesn't triggers it).
>
>  Anyway, I would want to do it in one query.
>
>  Any help, advice or constructive criticism would be greatfully welcome :D
>
>  Regards.
> --
> If you want to report a vulnerability issue on symfony, please send it to
> security at symfony-project.com
>
> You received this message because you are subscribed to the Google
> Groups "symfony users" group.
> To post to this group, send email to symfony-users@googlegroups.com
> To unsubscribe from this group, send email to
> symfony-users+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/symfony-users?hl=en
>
>
>
> --
> Regards, David Mann - *Coding Ninja*
>
> --
> If you want to report a vulnerability issue on symfony, please send it to
> security at symfony-project.com
>
> You received this message because you are subscribed to the Google
> Groups "symfony users" group.
> To post to this group, send email to symfony-users@googlegroups.com
> To unsubscribe from this group, send email to
> symfony-users+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/symfony-users?hl=en
>

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en

Reply via email to