MySQL — PHP ActiveRecord — Ассоциация не работает

Я только начал использовать класс PHP ActiveRecord и хорошо с ним справлялся, но теперь я застрял, пытаясь связать пользователя с группой и группой со многими пользователями.

Вот что у меня есть:

SQL-часть:

CREATE TABLE `users` (
`id`          INT(255)        NOT NULL AUTO_INCREMENT,
`group_id`    INT(255)        NOT NULL ,
`name`        VARCHAR(150)    NOT NULL ,
`email`       VARCHAR (150)   NOT NULL ,
`passwd`      VARCHAR (512)   NOT NULL ,
`salt`        VARCHAR (16)   NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `groups` (
`id`          INT(255)        NOT NULL AUTO_INCREMENT,
`name`        VARCHAR(150)    NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

PHP-класс:

#Class User.php
class User extends ActiveRecord\Model{

static $belongs_to = array(
array('group')
);

static $validates_presence_of = array(
array('name'),
array('email'),
array('passwd'),
array('salt')
);

static $validates_uniqueness_of = array(
array('name'),
array('email')
);
}

#Class Group.php
class Group extends ActiveRecord\Model{

static $has_many = array(
array('users')
);

static $validates_presence_of = array(
array('name')
);

static $validates_uniqueness_of = array(
array('name')
);
}

VAR DUMP Пользователь:

<?php
var_dump(User::find(1));
?>

Теперь, если я ищу пользователя, никакая группа не присоединяется … Кто-то знает, как решить эту проблему, или может сказать мне, что я делаю неправильно? Я просто не могу найти свою ошибку … 🙂

вывод var_dump:

object(User)[32]
public 'errors' => null
private 'attributes' (ActiveRecord\Model) =>
array (size=6)
'id' => int 1
'group_id' => int 1
'name' => string 'admin' (length=5)
'email' => string '[email protected]' (length=17)
'passwd' => string 'f22b07f3b0f2d93a696336f040a6d08b8c36fe53fc5f080b5a3ad1db3387b4553f16ed2c7c4196900f3ff9b8aa516b115e8250be6c0a60f6e22cf768fe43c291' (length=128)
'salt' => string '6976e5b5410415bd' (length=16)
private '__dirty' (ActiveRecord\Model) =>
array (size=0)
empty
private '__readonly' (ActiveRecord\Model) => boolean false
private '__relationships' (ActiveRecord\Model) =>
array (size=0)
empty
private '__new_record' (ActiveRecord\Model) => boolean false

В любом случае, спасибо за то, что взглянули на это 🙂

0

Решение

Сделал обходной путь:

<?php
class Model extends ActiveRecord\Model{

public $Extensions = array();
protected $relations = array('has_one' => array(), 'belongs_to' => array());

static $after_construct = array('set_relations');

public function set_relations(){
foreach($this->relations['has_one'] as $relation){
$upper =  ucfirst($relation);
$lower = strtolower($relation);
$id_table = $lower.'_id';

$this->Extensions[$upper] = $upper::find($this->$id_table);
}

foreach($this->relations['belongs_to'] as $relation){
$model =  ucfirst($relation[0]);
$id_table = $relation[1];

$this->Extensions[$model] = $model::find(array('conditions' => array($id_table.' = ?', $this->id)));
}
}
}

И вот как вы используете это …

    protected $relations = array('has_one' => array('group'), 'belongs_to' => array(array('publisher', 'user_id')));

static $validates_presence_of = array(
array('name'),
array('email'),
array('passwd'),
array('salt'),
array('group_id')
);

static $validates_uniqueness_of = array(
array('name'),
array('email')
);
}
?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]