Метод find () находит запись только по первичному ключу.
Вы можете найти записи по другим полям с помощью методов findBy * / findOneBy *, как упомянуто @phidah (так что в вашем случае это findOneByCity).
Однако в конечном коде не следует использовать методы поиска. Из документации доктрины:
Это очень ограниченные магические искатели, и всегда рекомендуется расширять ваши запросы, чтобы они были написаны вручную DQL-запросами. Эти методы предназначены только для быстрого доступа к отдельным записям, без связей и хороши для быстрого прототипирования кода.
Подробнее о магических поисках читайте здесь: http://www.doctrine -project.org / documents / manual / 1_2 / nl / dql-doctrine-query-language: magic-finders
Я бы предпочел сделать короткий вызов модельному методу в вашем действии.
Действие:
$this->city = CityTable::getByName($request->getParameter('city'));
Модель:
public static function getByName($cityName)
{
return Doctrine_Core::getTable('City')
->createQuery('c')
->where('c.city = ?', $cityName)
->fetchOne();
}
Пока вы даете соответствующее имя своему методу, который показывает его намерения, ваш код будет гораздо более читабельным.