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

如何通过Yii中的链接表从一个表中获取行?,yii,Yii,我以前在一家公司工作的程序员已经辞职了,所以我一直在自己学习Yii。我认为解决这个问题很容易,如果你知道Yii的话,但对我来说这并不明显 我有三张桌子: | Store | Brand | link_store_brand | |-------|-------|------------------| | id | id | storeID | | | | brandID | 现在,我需要获取与商店相关的所有品牌 我的商店型

我以前在一家公司工作的程序员已经辞职了,所以我一直在自己学习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();
我知道我可以用('brands')->findByPk()做
Store::model()->。但是字段命名问题会导致SQL查询失败。因此,我首先检索商店数据,然后获取品牌


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

您应该用以下方式定义
商店
品牌
链接商店
之间的两种
多对多
关系:

商店:

public function relations()
{

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

public function relations()
{

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

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

public function relations()
{

    return array(
        'link_store_brand' => array(self::HAS_MANY, 'LinkStoreBrand', 'brand_id'),
    );
}
 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\u store\u brand
表中生成模型。

SQL失败的确切错误是什么?