Symfony получить записи из категории и подкатегории - PullRequest
0 голосов
/ 05 ноября 2011

Я использую Symfony 1.4.15 с доктриной.И у меня есть категория и подкатегория:

Category:
  actAs:
    Timestampable: ~
    Sluggable:
      unique: true
      canUpdate: true
      fields: [name]
      builder: [myTools, StripText]
    I18n:
      fields: [name]
  columns:
      name:   { type: string(255), notnull: true }

Subcategory:
  actAs:
    Timestampable: ~
    Sluggable:
      unique: true
      canUpdate: true
      fields: [name]
      builder: [myTools, StripText]
    I18n:
      fields: [name]
  columns:
    category_id:  { type: integer() }
    name:   { type: string(255), notnull: true }
  relations:
    Category: { onDelete: CASCADE,local: category_id , foreign: id }

И у меня есть продукт.Продукт имеет отношения с категорией и подкатегорией.

Product:
  actAs:
    Timestampable: ~
    Sluggable:
      unique: true
      canUpdate: true
      fields: [name]
      builder: [myTools, StripText]
    I18n:
      fields: [name,description,shortbody,meta_keywords,meta_description]
  columns:
    partner_id:           { type: integer() }
    active:               { type: boolean, default: 0, notnull: false }
    name:                 { type: string(255), notnull: true }
    shortbody:            { type: string(500), notnull: true }
    description:          { type: string(), notnull: true }
    reference:            { type: string(100), notnull: true }
    code:                 { type: string(100), notnull: true }
    delivery_period:      { type: string(100), notnull: true }
    shipping_volume:      { type: string(100), notnull: true }    
    weight:               { type: string(100), notnull: true } 
    packing:              { type: string(100), notnull: true } 
    package_dimensions:   { type: string(100), notnull: true } 
    type_of_packaging:    { type: string(100), notnull: true } 
    video_url:            { type: string(100), notnull: false }
    meta_keywords:        { type: string(255) }
    meta_description:     { type: string(255) }
  relations:
    Subcategory:          { local: product_id , foreign: subcategory_id, refClass: ProductSubcategory } 
    Category:             { local: product_id , foreign: category_id, refClass: ProductCategory } 
    Partner:              { local: partner_id , foreign: id, onDelete: CASCADE }



ProductSubcategory:
  connection: doctrine
  columns:
    subcategory_id:  { type: integer(), primary: true}
    product_id:      { type: integer(), primary: true }
  relations:
    Product:         {  onDelete: CASCADE,local: product_id, foreign: id }
    Subcategory:     {  onDelete: CASCADE,local: subcategory_id, foreign: id }

ProductCategory:
  connection: doctrine
  columns:
    category_id:  { type: integer(), primary: true}
    product_id:   { type: integer(), primary: true }
  relations:
    Product:             {  onDelete: CASCADE,local: product_id, foreign: id }
    Category:            {  onDelete: CASCADE,local: category_id, foreign: id }

Поэтому мне нужно получить все продукты из подкатегории и категории (один запрос для этого) Я могу получить все продукты, которые относятся к категории:

 $q = $this->createQuery('a')
                       ->andWhere('a.active=1')
                       ->leftJoin('a.ProductCategory o')
                       ->andWhere('o.Category_id=?',$category_id)
                       ->addORDERBY ('created_at DESC');

Но я не знаю, как получить все товары из всех подкатегорий категории .... Спасибо!

1 Ответ

2 голосов
/ 05 ноября 2011

1) вам известно о поведении NestedSet в Doctrine? Это должно решить необходимость вашей Subcategory таблицы. И это также позволяет "более глубокие категории"

2) В вашей текущей модели почему имеет отношение Product к Subcategory и Category? Category можно определить по Subcategory.

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

...