PHP ActiveRecord - 关联不起作用

标签 php mysql orm phpactiverecord

我刚刚开始使用 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 转储用户:

<?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 'user@email.com' (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

无论如何,感谢您查看它:)

最佳答案

采取了解决方法:

<?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')
    );
}
?>

关于PHP ActiveRecord - 关联不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157407/

相关文章:

php - xampp mysql 用户只能在没有密码的情况下工作

php - 选择当月的记录而不进行全表扫描

mysql - 如何在 MySql Workbench 中隐藏空白行

php - 如何使用特定参数 PHP 运行 SQL 脚本

mysql - 为什么 Django ORM 找不到明显在我的数据库中的项目?

php - 从子类构造函数中访问父类方法

php - 在 Laravel 5 中为 CKEditor 设置路由以与 CKFinder 一起工作

mysql - 我可以通过 Sequel Pro 连接到数据库,但不能通过命令行

php - 查找 "a"行是否与 ORM 中的 "b"行有关系的最有效方法?

java - 如何在@ElementCollection 上指定主键