如何在 Yii 中通过链接的 table 从一个 table 中获取行?

How to I fetch rows from one table via linked tables in Yii?

我之前在公司工作的程序员辞职了,所以我一直在学习Yii。如果你知道 Yii,我认为解决这个问题很简单,但对我来说不是那么明显。

我有三个表:

| Store | Brand | link_store_brand |
|-------|-------|------------------|
| id    | id    | storeID          |
|       |       | brandID          |

现在我需要获取与商店关联的所有品牌

我的商店模型中有这段代码:

public function relations()
{
     return array(
        'brands' => array(CActiveRecord::MANY_MANY,
            'Brand',
            'link_store_brand(storeID, brandID)',
            'order' => 'brands.rank DESC, brands.name ASC',
            'with' => 'logo'),
     );
}

所以在我的控制器中我这样做:

    $store          = Store::model()->findByPk($requestData->id);
    $brands         = $store->getBrands();

我知道我可以做到 Store::model()->with('brands')->findByPk()。但是字段命名问题导致 SQL 查询失败。所以我首先检索商店数据,然后获取品牌。

但是 $store->getBrands() 不工作(SQL 失败)所以我想我必须使用查询生成器并进行自己的查询来获取品牌。但是我该怎么做呢?

你应该这样定义 StoreBrandlink_store_brand 之间的两个 Many To Many 关系:

Store:

public function relations()
{

    return array(
        'link_store_brand' => array(self::HAS_MANY, 'LinkStoreBrand', 'store_id'),
    );
}

Brand:

public function relations()
{

    return array(
        'link_store_brand' => array(self::HAS_MANY, 'LinkStoreBrand', 'brand_id'),
    );
}

LinkStoreBrand:

 public function relations()
{

    return array(
        'store' => array(self::BELONGS_TO, 'Store', 'store_id'),
        'brand' => array(self::BELONGS_TO, 'Brand', 'brand_id'),
    );
}

现在,如果您想访问一家商店的所有品牌,您可以这样做:

$links = LinkStoreBrand::model()->with("brand")->find("store_id = :store_id", array(":store_id"=>$requestData->id));
//$links will be an array
$brands = array();
foreach($links as $link)
{
   array_push($brands, $link->brand);
}

现在,$brands 是与商店相关联的一系列品牌。

注意: 如果您尚未生成模型,则必须从 link_store_brand table 生成 LinkStoreBrand 模型。