动态设置class数组参数,redbeanphp wrapper

Dynamically set class array parameter, redbeanphp wrapper

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

基本上不用

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

我喜欢

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

这样做的方法是, 我有一个名为 User 的 class 扩展模型 模型运行 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;

我收到这个错误

Notice: Indirect modification of overloaded property Zigi\models\User::$ownBooks has no effect

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

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

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

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