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