2009-08-14 7 views
2

У меня возникла проблема с представлениями в Доктрине.Просмотров в Доктрине ORM

У меня есть следующий вид в моей базе данных:

$q = Doctrine_Query::create() 
         ->select('c.id, c.name, m.id, m.name, m.status, 
            m.modified, m.entered, m.accountid') 
         ->from('Category c') 
         ->leftJoin('c.Mailing m'); 
$view = new Doctrine_View($q, 'view_mailings'); 
$q->execute(array(), Doctrine::HYDRATE_ARRAY); 

Результат состоит из всех записей. Однако мне нужно получить подмножество на основе различного значения для accountid и упорядочиваться разными столбцами . Как я могу это достичь?

Благодарим за помощь.

ответ

1

Вы просто выполняете запрос $ q, не используя созданное представление.

+1

Извините, но в вашем ответе нет большого смысла. Если бы я хотел использовать прямой запрос, я бы вообще не стал делать представления в базе данных. – veli

2

Другое решение может быть создание схемы для представления внутри конфигурации/доктриной/как это:

objective: 
    tableName: objective 
    columns: 
    id: 
     type: integer 
    zone: 
     type: string(50) 
    province: 
     type: string(30) 
    city: 
     type: string(100) 
    population: 
     type: integer 
    city_obj_id: 
     type: integer 
    clinic_number: 
     type: integer 
    clinic_obj: 
     type: integer 
    comments: 
     type: string(255) 

, а затем положить objective_view.sql внутри данных/SQL/как это:

DROP VIEW IF EXISTS objective; 
DROP TABLE IF EXISTS objective; 
CREATE VIEW objective AS 
    SELECT 
    c.id as id, 
    z.name as zone, 
    p.name as province, 
    c.name as city, 
    cs.amount as population, 
    co.id as city_obj_id, 
    co.clinic_num as clinic_number, 
    co.clinic_obj as clinic_obj, 
    co.comments as comments 

    FROM 
    city c left join city_objective co on co.city_id = c.id 
    left join city_census cs on (cs.city_id = c.id and cs.year = 2009) 
    left join province p on p.id = c.province_id 
    left join zone z on z.id = p.zone_id; 

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

+0

Я вижу, что вопрос был давно опубликован! Как вы с этим справились? или Вы нашли какие-нибудь другие способы борьбы с доктринами? – med

+0

Как выполняется 'object_view.sql'? Задача 'insert-sql', похоже, не делает этого ... –

+0

@PeterTaylor: если вы выполняете' symfony doctrine: build --all --and-load', он выполнит все sql-скрипты внутри data/sql/папка ... – med