"PHP" / Говнокод #6761 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
public function getRelatedDataProvider($relationName,$config=array(),$params=array()){
		
		$md = $this->getMetaData();
		if(!isset($md->relations[$relationName])){
			throw new CDbException(Yii::t('yii','{class} does not have relation "{name}".',
				array('{class}'=>get_class($this), '{name}'=>$relationName)));
		}
		
		$relation = $md->relations[$relationName];
		if(!($relation instanceof CHasManyRelation || $relation instanceof CManyManyRelation)){
			throw new CDbException(Yii::t('yii','Связь {class}.{name} имеет тип, отличный от Has_Many и Many_Many.',
				array('{class}'=>get_class($this), '{name}'=>$relationName)));
		}
		
		// return new CArrayDataProvider($this->getRelated($relationName,true,$params), $config);
		
		var_dump($relation);
		
		// копируем критерии из связи
		$criteria = new CDbCriteria;
		foreach(array('select', 'condition', 'params', 'limit', 'offset', 'order', 'group', 'join', 'having', 'with', 'alias', 'index', 'together') as $param){
			$criteria->$param = $relation->$param;
		}
		
		// склеиваем параметры с критерией
		$criteria->mergeWith(
			is_string($params)
				? array('condition' => $params)
				: $params
		);
		
		// добавляем связь через fk
		// ВОТ ТУТ Я НИЧЕГО НЕ ПОНИМАЮ :)
		$thisTable = $this->getTableAlias();
		$childModel = CActiveRecord::model($relation->className);
		$childMd = $childModel->getMetaData();
		$childTable = empty($relation->alias) ? $childModel->getTableAlias() : $relation->alias;
		//$criteria->join .= " {$relation->joinType} {$thisTable} ON {$thisTable}.{$relation->foreignKey}={$childTable}.{$childMd->tableSchema->primaryKey}";
		$criteria->params[':fkrel'] = $this->{$relation->foreignKey};
		$criteria->addCondition("{$childTable}.{$relation->foreignKey}=:fkrel");
		
		
		// собираем кофиг для CActiveDataProvider
		$dpConfig = array(
			'criteria' => $criteria,
		) + $config;
		
		echo "CActiveDataProvider( {$relation->className} , criteria: ".var_export($dpConfig['criteria']->toArray(),true)." )";
		
		// 
		$dataProvider = new CActiveDataProvider(
			$relation->className,
			$dpConfig
		);
		
		return $dataProvider;
	}
	
}

Запостил: res-nullis res-nullis, (Updated )

Комментарии (41) RSS

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8