代码之家  ›  专栏  ›  技术社区  ›  ajile

条令:如何将三张桌子结合起来,以多对多的态度

  •  0
  • ajile  · 技术社区  · 15 年前

    共有3个表:

    catalog
    product
    product2catalog
    

    product2catalog 由以下字段组成:

    catalog_id
    product_id
    

    如何在目录中获取商品?如何重建连接以实现此目的:

    $CatalogTable = CatalogTable::getInstance();
    $Catalog = $CatalogTable->find( $id );
    var_dump( $Catalog->product );
    

    你能帮我吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Tyson    15 年前

    正如所述,多对多关系在理论上很容易实现。 here .

    这样设置关系:(在目录表的set up()函数中)

    $this->hasMany('Product as Products',
    array('local' => 'catalog_id',
          'foreign' => 'product_id',
          'refClass' => 'product2catalog'
        ));
    

    同样,在yaml中:

    Catalog:
    # ...
      relations:
       # ...
        Products:
          class: Product
          local: catalog_id
          foreign: product_id
          refClass: product2catalog
    

    您还必须对产品类执行相同的操作-完全相同的语法,只需反转本地/外部引用。

        2
  •  1
  •   jgallant    15 年前

    要查询多对多关系,可以执行以下操作:

    $q = Doctrine_Query::create()
        ->from('Catalogue c')
        ->leftJoin('c.Product p')
        ->where('c.id = ?', $id);
    
    $c = $q->fetchArray();
    
    推荐文章