动态设置类数组参数,redbeanphp包装器

时间:2015-06-29 14:43:54

标签: php oop redbean

我正在为redbeanphp orm写一个包装器,

基本上不是使用

$user = R::dispense('users');
$user->name = 'Zigi marx';
R::store($user);

我喜欢这样

$user = new User();
$user->name = 'Zigi marx';
$user->save();

这样做的方式是, 我有一个名为User的类,它扩展了模型 和模型运行Redbeanphp

我的模型的完整代码可以在这里找到 http://textuploader.com/bxon

我的问题是当我尝试设置一对多的关系时, 在redbean中它是这样完成的

$user = R::dispense('users');
$user->name = 'Zigi marx';

$book = R::dispense('books');
$book->name = 'Lord of the rings II';
$user->ownBooks[] = $book;

并在我的代码中

$user = new User();
$user->name = 'Zigi marx';
$book = new Book();
$book->name = 'Lord of the rings II';
$user->ownBooks[] = $book;

我收到此错误

  

注意:间接修改重载属性   Zigi \ models \ User :: $ ownBooks无效

答案:  模型中的__get函数需要像这样改变

public function & __get($name){
    $result =& $this->__bean->{$name};
    return $result;
}

1 个答案:

答案 0 :(得分:0)

您的__get方法按值返回bean属性,因此您无法在以后修改它。要修复它,您需要通过引用(see PHP manual)返回它,方法定义中添加&,如下所示:

public function & __get($name){
    $result =& $this->__bean->$name;
    return $result;
}