从bean中取消装箱模型时,RedBean返回null?

时间:2017-01-31 04:37:38

标签: php orm redbean

我无法使用box()方法,我只能从中获取NULL

例如,如果我这样做

$bean = \R::load('comment', 2);

print("\n\nBEAN:\n");
var_dump($bean);

$model = $bean->box();

print("\n\nMODEL:\n");
var_dump($model);

我明白了

BEAN:
class RedBeanPHP\OODBBean#68 (10) {
  protected $properties =>
  array(4) {
    'id' =>
    string(1) "2"
    'user' =>
    string(1) "2"
    'reply_to' =>
    NULL
    'message' =>
    string(30) "Test comment 1"
  }
  protected $__info =>
  array(4) {
    'type' =>
    string(7) "comment"
    'sys.id' =>
    string(2) "id"
    'sys.orig' =>
    array(5) {
      'id' =>
      string(1) "2"
      'user' =>
      string(1) "1"
      'reply_to' =>
      NULL
      'message' =>
      string(30) "Test comment 1"
    }
    'tainted' =>
    bool(false)
    'changed' =>
    bool(false)
  }
  protected $beanHelper =>
  class RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper#17 (0) {
  }
  protected $fetchType =>
  NULL
  protected $withSql =>
  string(0) ""
  protected $withParams =>
  array(0) {
  }
  protected $aliasName =>
  NULL
  protected $via =>
  NULL
  protected $noLoad =>
  bool(false)
  protected $all =>
  bool(false)
}


MODEL:
NULL

显然bean中有数据,为什么box()会返回NULL

1 个答案:

答案 0 :(得分:0)

似乎这是一个命名空间问题。

documentation

  

如果您希望模型驻留在名称空间\ Model中,可以设置以下常量:

   //with namespace Model
   define( 'REDBEAN_MODEL_PREFIX', '\\Model\\' )
     

您现在可以创建一个这样的模型类:

   class \Model\Band extends \RedBeanPHP\SimpleModel { ... }

短语“......你可以设置......”让我相信它是可选的。但是,事实证明,如果您希望模型驻留在名称空间\ Model中,并且您希望能够使用FUSE方法,那么必须设置上面的常量,并且必须< / strong>调用您的模型类Band

另外,请注意,当您定义该命名空间字符串时,必须在任何地方使用双反斜杠(\\)。

为了增加混淆,就在上面的文档段落之前,有一段说

  

RedBeanPHP使用命名约定(即Model_ {TYPE OF BEAN})自动将bean与模型连接起来。

显然,当 NOT 使用命名空间时,你应该使用命名约定Model_Band,当你这样做时,你应该使用命名约定Band,或者事情发生。