поиск многих ко многим - PullRequest
       10

поиск многих ко многим

3 голосов
/ 18 ноября 2008

Я подаю заявку в лист ожидания. Я хотел бы иметь возможность отправлять приложениям уникальный код подтверждения, а затем найти пользователя по коду подтверждения или по имени пользователя.

Сможет ли Symfony позвонить моделям и сказать:

Code->findUser($code_string);

User->getCode();

Я полагаю, что приведенная ниже схема имеет отношения, но я не уверен, что это способ Symfony связать эти отношения вместе.

Спасибо за ваше время,

  user:
    id:
    last_name: varchar(255)
    first_name: varchar(255)
    email: varchar(255)

  code:
    id:
    secret: varchar(255)

  user_code:
    id:
    user_id:
    code_id:

  course:
    id:
    title: varchar(255)

  quarter:
    id:
    title: varchar(255)

  wait_list:
    id:
    user_id:
    course_id:
    quarter_id:

1 Ответ

2 голосов
/ 20 ноября 2008

Symfony по умолчанию использует Propel и поддерживает Doctrine в качестве плагина.

Пример запроса через отношение «многие ко многим», где таблица Bugs связана с таблицей Products через таблицу пересечений BugsProducts:

[Bugs]  <--  [BugsProducts]  -->  [Products]

Решение с использованием Propel:

schema.xml:

  <table name="Bugs">
    <column name="bug_id" type="INTEGER" required="true" 
     primaryKey="true" autoIncrement="true" />
  </table>

  <table name="Products">
    <column name="product_id" type="INTEGER" required="true" 
     primaryKey="true" autoIncrement="true" />
    <column name="product_name" type="VARCHAR" size="50" required="true" />
  </table>

  <table name="BugsProducts">
    <column name="bug_id" type="INTEGER" required="true" primaryKey="true" />
    <column name="product_id" type="INTEGER" required="true" primaryKey="true" />
    <foreign-key foreignTable="Bugs">
      <reference local="bug_id" foreign="bug_id" />
    </foreign-key>
    <foreign-key foreignTable="Products">
      <reference local="product_id" foreign="product_id" />
    </foreign-key>
  </table>

Пример запроса: найдите ошибку # 1234, найдите связанные продукты с помощью запроса «многие ко многим» и сообщите.

$bug = BugsPeer::retrieveByPK(1234);

$bugProducts = $bug->getBugsproductsJoinProducts();

foreach ($bugProducts as $bp) {
  $product = $bp->getProducts();
  print "bug id #".$bug->getBugId().": product ".$product->getProductName()."\n"
;
}

Решение с использованием доктрины:

class Bugs extends Doctrine_Record
{
  public function setUp()
  {
    $this->hasMany('Products', array('local'=>'bug_id',
                 'foreign'=>'bug_id',
                 'refClass'=>'BugsProducts'));
  }
}

class Products extends Doctrine_Record
{
  public function setUp()
  {
    $this->hasMany('Bugs', array('local'=>'product_id',
                 'foreign'=>'product_id',
                 'refClass'=>'BugsProducts'));
  }
}

Пример запроса: найдите ошибку # 1234, найдите связанные продукты с помощью запроса многие-ко-многим и сообщите.

$bugsTable = Doctrine::getTable('Bugs');

$bug = $bugsTable->find(1234);

foreach ($bug->Products as $product) {
  print 'Bug #'.$bug->bug_id.': product '.$product->product_name."\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...