я получил 2000, 1066, Не уникальная таблица / псевдоним: ‘категория’ эта ошибка. Я очень хорошо знаю, в чем проблема.
Мой код:
static $belongs_to = array(
array('Parent',
'foreign_key'=>'parent_id',
'class_name'=>'categoryModel',
),
array('gallery','class_name'=>'galleryModel','foreign_key'=>'image_id'),
);
Genrate ниже запроса
SELECT `category`.* FROM `category` INNER JOIN `category` ON(`category`.parent_id = `category`.category_id)
Мне нужно использовать псевдоним но я не знаю, как использовать псевдоним в php ActiveRecord
Код модели
<?php
class categoryModel extends appModel
{
static $table_name = '`category`';
static $primary_key = 'category_id';
static $belongs_to = array(
array('Parent',
'foreign_key'=>'parent_id',
'class_name'=>'categoryModel',
// 'conditions' => 'parent.parent_id is null'
),
array('gallery','class_name'=>'galleryModel','foreign_key'=>'image_id'),
);
static $has_many = array(
array('cr','class_name'=>'category_relationModel','foreign_key'=>'category_id')
);
static $delegate = array(
array('name', 'to' => 'parent', 'prefix' => 'parent'));
}
и appModel Code:
<?php
class appModel extends ActiveRecord\Model{
public $app,$attr;
public $db_config;
function __construct(array $attributes=array(), $guard_attributes=true, $instantiating_via_find=false, $new_record=true){
parent::__construct($attributes, $guard_attributes,$instantiating_via_find, $new_record);
}function __call($key,$value){
parent::__call($key,$value);
}
public function load($data){
foreach($this->attributes as $attr=>$value){
if(!isset($this->attr["".$attr])){
//if(isset($data[$attr])) $this->attr["".$attr] = $data[$attr];
if(isset($data[$attr])) $this->attributes["".$attr] = $data[$attr];
}
}
}
}
Я сделал с помощью изменения основного кода.
Изменить в Table.php
Метод: create_joins($joins)
if (array_key_exists($rel->class_name,$existing_tables))
{
$alias = $value;
$existing_tables[$rel->class_name]++;
}else{
$existing_tables[$rel->class_name] = true;
$alias = NULL; // change this to $alias = $value;
}
изменение
if (array_key_exists($rel->class_name,$existing_tables))
{
$alias = $value;
$existing_tables[$rel->class_name]++;
}else{
$existing_tables[$rel->class_name] = true;
$alias = $value;
}
$ value это имя отношения
Других решений пока нет …