find() method only finds a record by a primary key.
You are able to find records by other fields with findBy*/findOneBy* methods just like @phidah mentioned (so it's findOneByCity in your case).
However, you shouldn't use finder methods in your final code. From doctrine's documenation:
These are very limited magic finders and it is always recommended to expand your queries to be manually written DQL queries. These methods are meant for only quickly accessing single records, no relationships, and are good for prototyping code quickly.
Read more about magic finders here: http://www.doctrine-project.org/documentation/manual/1_2/nl/dql-doctrine-query-language:magic-finders
I'd rather put a short call to a model method in your action.
Action:
$this->city = CityTable::getByName($request->getParameter('city'));
Model:
public static function getByName($cityName)
{
return Doctrine_Core::getTable('City')
->createQuery('c')
->where('c.city = ?', $cityName)
->fetchOne();
}
As long as you give appropriate name to your method, which shows its intent, your code is far more readable.