You can pass an array of IDs to EventPeer::doDelete() instead of a  
Criteria object.  It'll translate that to a DELETE FROM .. WHERE ID IN  
(...) query.  All of this is in the base peer class for your object in  
the lib/model/om dir.

On Oct 22, 2009, at 3:18 PM, fbg wrote:

>
> Thanks Jacob.  In my case I will have already hydrated the objects and
> need to use them before the delete anyway.
>
> My question relates to how best to do the delete after that.  i.e.
> rather than have 1000 lines like this:
> DELETE FROM mytable WHERE id=1
> DELETE FROM mytable WHERE id=2
> etc...
> DELETE FROM mytable WHERE id=1000
>
> I'd rather generate something like
>  DELETE FROM mytable WHERE id IN(1,2,....1000)
>
> At least I assume that will be more efficient.  Right?
>
> Per your suggestion I suppose can do this, but see below:
>
> <code>
>  $c = new Criteria();
>  $c->add(your criteria);
>  $results = doSelect($c);
>  // now I process the results for a while
>  EventPeer::doDelete($c);
> </code>
>
> But I assume that the criteria $c could imply different rows in the
> table if records were inserted by someone else between the doSelect
> and the doDelete.
>
> So I guess I could also do this:
>
> <code>
>  $c = new Criteria();
>  $c->add(your criteria);
>  $results = doSelect($c);
>  // now I process the results for a while
>  // then I build a big string '(id1, id2, ..., id1000)' -- with
> $result['ID'] inserted
>  // then:
>  $c = new Criteria();
>  $c->add(myClassPeer::ID, $list, Criteria::IN);
>  EventPeer::doDelete($c);
> </code>
>
> Is that the best way?  Or, does the result set actually have a mass-
> delete method?  $result->delete().  Sorry for being lazy and not
> slogging thru the code to figure that out but thought I'd ask to see
> if someone knows the answer.
> On Oct 22, 1:17 pm, Jacob Coby <[email protected]> wrote:
>> $c = new Criteria();
>> $c->add(your delete criteria);
>>
>> EventPeer::doDelete($c);
>>
>> That will delete the rows according to your criteria without  
>> hydrating
>> objects into memory.
>>
>> On Oct 22, 2009, at 12:24 PM, fbg wrote:
>>
>>
>>
>>
>>
>>> Suppose that I have a symfony 1.0 app and perform a propel query,  
>>> work
>>> with the results a bit, and then wish to delete the underlying
>>> database records (for example, to scrub a log table, send out any
>>> needed alert emails, and roll the log events into a flat file to  
>>> keep
>>> the DB fresh).
>>
>>> What is the most efficient way to tell sf to do the delete?
>>
>>> eg:
>>
>>> ...criteria...LIMIT 1000 OFFSET N ...
>>> $results = doSelect (or doSelectRs) ...
>>> foreach($results as $result)
>>> {
>>> // process the result then:
>>> $result->delete();
>>> }
>>
>>> OR, is there a $results->delete();  if so, are they equivalent?
>>
>>> What I'm wondering about is whether sf will generate 1000 DELETE SQL
>>> requests, or whether there will be something else like DELETE ...
>>> WHERE id IN (i1,i2,...,i1000).  I assume the latter would be much  
>>> more
>>> efficient.  Comments?
>>
>>> Thanks in advance for any advice.
>>
>> --
>> Jacob Coby
> >

--
Jacob Coby







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

Reply via email to