如何在 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 失败)所以我想我必须使用查询生成器并进行自己的查询来获取品牌。但是我该怎么做呢?
你应该这样定义 Store
、Brand
、link_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
模型。
我之前在公司工作的程序员辞职了,所以我一直在学习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 失败)所以我想我必须使用查询生成器并进行自己的查询来获取品牌。但是我该怎么做呢?
你应该这样定义 Store
、Brand
、link_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
模型。