получение информации об объекте с помощью Doctrine - PullRequest
0 голосов
/ 18 апреля 2010

Я хочу получить информацию из базы данных, используя объекты.

Мне действительно нравится этот подход, потому что это больше ООП:

$user = Doctrine_Core::getTable('User')->find(1);
echo $user->Email['address'];
echo $user->Phonenumbers[0]->phonenumber;

вместо:

$q = Doctrine_Query::create()
    ->from('User u')
    ->leftJoin('u.Email e')
    ->leftJoin('u.Phonenumbers p')
    ->where('u.id = ?', 1);
$user = $q->fetchOne();
echo $user->Email['address'];
echo $user->Phonenumbers[0]['phonenumber'];

проблема в том, что первый использует 3 запроса (3 разных таблицы), а второй использует только 1 (и поэтому является рекомендуемой техникой).

но я чувствую, что это разрушает объектно-ориентированный дизайн. причина ORM предназначен для того, чтобы дать нам подход ООП, чтобы мы могли сосредоточиться на объектах, а не на реляционной базе данных. но теперь они хотят, чтобы мы вернулись к использованию SQL-подобного шаблона.

нет способа получить информацию из нескольких таблиц, не используя DQL?

приведенные выше примеры взяты из документации: Доктрина

1 Ответ

1 голос
/ 18 апреля 2010
  1. Создайте пользовательский метод в вашем классе Table, который будет возвращать правильные данные:

    class UserTable extends Doctrine_Table {
        public function retrieveOne($id) {
            return $this->createQuery('u')
                        ->leftJoin('u.Email')
                        ->leftJouin('u.Phonenumbers p')
                        ->where('u.id = ?', $id)
                        ->fetchOne();
        }
    }
    
  2. Ваш окончательный код:

    $user = Doctrine::getTable('User')->retrieveOne(1);
    echo $user['Phonenumbers'][0]['phonenumber'];
    
...