从bean拆箱模型时RedBean返回null?

Posted

技术标签:

【中文标题】从bean拆箱模型时RedBean返回null?【英文标题】:RedBean returns null when unboxing model from bean? 【发布时间】:2017-01-31 04:37:38 【问题描述】:

我无法让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】:

似乎是命名空间问题。

documentation 这么说

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

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

您现在可以像这样创建模型类:

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

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

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

 

为了增加混乱,在上述文档段落之前,有一段说

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

显然,当你使用命名空间时,你应该使用命名约定Model_Band,而当你这样做时,你应该使用命名约定Band,否则事情就会崩溃。

【讨论】:

以上是关于从bean拆箱模型时RedBean返回null?的主要内容,如果未能解决你的问题,请参考以下文章

装箱拆箱

爬坑:Java自动拆箱

表示单行的模型是不是应该返回使用多行生成的数据?

装箱与拆箱

在 Redbean 中给出链接 bean 表的名称是不是有规则?

从装箱拆箱看泛型