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 <http://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 <http://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 <http://p.id> IN (SELECT
ph.id <http://ph.id> FROM VendorBundle:Photo ph JOIN ph.bedrooms
bp JOIN bp.bedroom b WHERE b.id <http://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 <http://p.id> IN (SELECT
bp.photo_id FROM VendorBundle:BedroomPhoto bp JOIN bp.bedroom b WHERE
b.id <http://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