Migrate data between tables efficiently
Can I accomplish this task without using so many foreach loops?


Depends.

If you want to stick with database-agnostic abstraction such as Doctrine, there is no way to avoid loops.

But if you want an efficient solution, you can write a database-specific query to copy all records in a single query. For example, for mysql it would be something like 

INSERT INTO invitation (field1, field2, status, talker) 
  SELECT field1, field2, ?, ? FROM talker


and then bind $status and $talker to this query.