Yii 依:按a搜索有很多关系
我有以下几张表Yii 依:按a搜索有很多关系,yii,Yii,我有以下几张表 notice[id, type], property[id, type], property_value[id, notice_id, property_id, value]. 每个通知都有其类型指定的属性。我需要同时使用多个属性制作一个过滤器,问题是如何指定哪个属性应该具有指定的值 class Notice extends CActiveRecord{ /** @var array property_id=>value from $_GET*/ publi
notice[id, type],
property[id, type],
property_value[id, notice_id, property_id, value].
每个通知都有其类型指定的属性。我需要同时使用多个属性制作一个过滤器,问题是如何指定哪个属性应该具有指定的值
class Notice extends CActiveRecord{
/** @var array property_id=>value from $_GET*/
public $searchParams= array();
public function search() {
$criteria = new CDbCriteria;
// $criteria->together = true;
$criteria->compare('t.type', $this->type);
foreach ( $searchParams as $property_id => $value) {
/// What should i write here?
/// $criteria->compare('propertyValues.id', $id);
/// $criteria->compare('propertyValues.value', $value);
}
}
}
Ps:找到了,但我需要指定参数…因为我发现这个问题是关于一个经典的EAV模型实体–属性–值。因此,对于临时但非最佳解决方案,我将每个参数的值表乘以:
public function search() {
foreach ($properties as $id => $value) {
$joinAlias = 'p_' . $property->id;
$join = "\nLEFT JOIN property_value as $joinAlias ON t.id= {$joinAlias}.notice_id AND {$joinAlias}.property_id='{$property_id}' ";
$criteria->compare("{$joinAlias}.value", $value);
$criteria->join .= $join;
}
}
$criteria->with=array'YOUR_TABLE'=>array'alias'=>nt';//它连接一个您指定的表Dzazu,是的,您是对的,忘了写它,但这不是重点:例如:我在三楼有一个公寓要搜索,有4个房间,这两个参数都存储在一列中…您能解释/显示每个模型类的关系吗?如果你有正确的答案,这很容易relations@Skatox很抱歉,回答晚了,但我发现我的问题是关于EAV模型的…在通知模型'propertyValues'=>arrayself::中有一个关系有很多'propertyValues','Notice\u id',在propertyValues'property'=>arrayself::中有一个关系属于'property',property\u id'