ПРИСОЕДИНЯЙТЕСЬ к 3 столам с Propel ORM - PullRequest
1 голос
/ 31 января 2011

Один из моих клиентов собирается выпустить новый продукт, разработчик, который делал кодирование, покинул проект (с завершением 85%).

Пользовательский запрос SQL должен быть выполнен с использованием Propel ORM.Запрос выглядит следующим образом:

$sql = "SELECT
    `domain`.*,
    `domain_registrar`.`name` AS `registrar_name`,
    `domain_account`.`id` AS `account_id`,
    `domain_account`.`username` AS `account_username`,
    DATEDIFF(`domain`.`expire_date`, NOW()) AS `days_to_expiration`

FROM
    `domain`
    LEFT JOIN `domain_account` ON `domain_account`.`id`=`domain`.`domain_account_id`
    LEFT JOIN `domain_registrar` ON `domain_registrar`.`id`=`domain_account`.`domain_registrar_id`

ORDER BY
    `days_to_expiration`,
    `domain_registrar`.`name`,
    `domain_account`.`username`,
    `domain`.`domain`";

У меня есть базовые знания о propel ORM, поэтому я подумал, что любой из экспертов может помочь мне решить эту проблему.Схема БД выглядит следующим образом:

<table name="domains" phpName="Domains">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <column name="account_id" type="INTEGER" required="true" />
    <column name="domain" type="VARCHAR" size="255" required="true" />
    <column name="expiration" type="DATE" />
    <foreign-key foreignTable="domain_accounts" phpName="DomainAccounts" refPhpName="Domains">
      <reference local="account_id" foreign="id" />
    </foreign-key>
  </table>
  <table name="domain_accounts" phpName="DomainAccounts">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <column name="registrar_id" type="INTEGER" required="true" />
    <column name="username" type="VARCHAR" size="255" required="true" />
    <column name="password" type="VARCHAR" size="255" required="true" />
    <foreign-key foreignTable="domain_registrars" phpName="DomainRegistrars" refPhpName="DomainAccounts">
      <reference local="registrar_id" foreign="id" />
    </foreign-key>
  </table>
  <table name="domain_registrars" phpName="DomainRegistrars">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <column name="value" type="VARCHAR" size="255" required="true" />
  </table>

1 Ответ

3 голосов
/ 03 февраля 2011

В Propel 1.5 это стало бы примерно таким (непроверенным, от макушки):

DomainsQuery::create()
    ->joinWith( 'Domains.DomainAccounts' )
    ->joinWith( 'Domains.DomainRegistrars' )
    ->withColumn( 'DATEDIFF(`domain`.`expire_date`, NOW())', 'DaysToExpiration' );  
...