如何在RedBean属性中存储array()?

时间:2011-12-22 10:16:59

标签: php orm redbean

我得到了以下内容:

$post = (array) json_decode($post);
$pushUser->dagen = (array) $post['days'];

'天'部分帖子是:

[dagen] => Array
    (
        [0] => Monday
        [1] => Wednesday 
    )

我想要做的就是将$ pushUser-dagen存储在数组中,天数为:)...很简单吧?

但后来我得到了这些错误:

  

例外' RedBean_Exception_Security'消息'无效Bean:属性dagen'在E:\ Documenten \ Dropbox \ Dropbox \ dummy-htdocs \ VID_service \ vid_push \ libs \ rb.php:3465   堆栈跟踪:   #0 E:\ Documenten \ Dropbox \ Dropbox \ dummy-htdocs \ VID_service \ vid_push \ libs \ rb.php(3496):RedBean_OODB-> check(Object(RedBean_OODBBean))   #1 E:\ Documenten \ Dropbox \ Dropbox \ dummy-htdocs \ VID_service \ vid_push \ libs \ rb.php(7376):RedBean_OODB-> store(Object(RedBean_OODBBean))   #2 E:\ Documenten \ Dropbox \ Dropbox \ dummy-htdocs \ VID_service \ vid_push \ api \ registerpush.php(32):R :: store(Object(RedBean_OODBBean))   #3 {main}

是否无法将数组存储在RedBean对象中?

3 个答案:

答案 0 :(得分:3)

无法在bean中存储数组,因为RedBeanPHP无法预测数组在数据库中的表示方式。

解决方案取决于您稍后要对此信息执行的操作。你想添加其他东西,而不仅仅是工作日,比如晚上或加班(如果安排?),在这种情况下,我会选择最灵活,最简单的解决方案:

//Flexible solution
foreach($days as $day) 
$user->sharedDay[] = R::findOne('day',' name = ? ',array($day));

因为我们使用sharedDay而不是ownDay,所以记录不会重复。此解决方案创建了一个整洁的链接表day_user。

当然,您需要在数据库中存储一周的工作日:

 $days = array('monday',...);
 foreach($days as $dayname) {
    $d = R::dispense('day');
    $d->name = $dayname;
    R::store($d);
 }

如果您希望能够快速跟踪具有特定工作日个人资料的用户,您可能需要对日期进行编码:

//Performance solution
function days($days) {
    $weekdays = array('sunday','monday','tuesday',...);
    $field = '';
    foreach($weekdays as $day) {
            $field .= (in_array($day,$days)) ? '1' : '0';
    }
    return $field;
}


$user->days = bindec(days($days)); 

在这种情况下,你可以通过查询找到每个拥有'星期一'和'星期六'的用户:天= 33。这真的很快。

如果您根本不关心数据,可以选择:

//Quick and dirty solution
$user->days = implode(',',$days);

答案 1 :(得分:3)

http://redbeanphp.com/community/wiki/index.php/Tutorial#Loading_A_Bean

结帐import()。您必须将键/值对存储的数组格式化为列/行等。

$bean->import($array);

$bean->import($array, "key1,key4");

等等。您总是可以使用数组或正则表达式搜索函数来查找您的值或格式化数组Redbean了解Array是键/值的位置,键必须遵循redbean中check()函数中定义的某些规则,我可以'记住我的头顶,只需打开rb.php并搜索“公共功能检查”(你应该找到它,但最后一个条件是你必须绝对满足的。

$pattern = '/[^a-z0-9_]/i';

它不能是数组或对象,并且属性必须是字符串> strlen of 2否则会抛出一个无效的bean:property ..... exception。它必须是key = value的平面数组,您可以轻松导入。

我希望有所帮助。

答案 2 :(得分:1)

一种解决方案是在将数组存储到bean中之前使用serialize($ array)序列化数组,并在检索时反序列化($ array)。