如何在RedBean属性中存储数组()


How to store an array() in a RedBean property?

我得到了以下信息:

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

文章的"days"部分为:

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

所有我想做的是存储在$pushUser-dagen数组与天:)…很简单吧?

但是我得到这些错误:

在E:'Documenten'Dropbox'Dropbox'dummy-htdocs'VID_service'vid_push'libs'rb.php:3465中异常'RedBean_Exception_Security'与消息'Invalid Bean: property dagen '堆栈跟踪:#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{主要}

是不可能存储数组在一个红豆对象?

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

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

$bean->import($array);

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

等等。你总是可以使用数组或正则表达式搜索函数来找到你的值或格式化你的数组的方式,Redbean理解数组是键/值,键必须遵循某些规则,这些规则在Redbean的check()函数中定义,我记不起来了,只是打开rb.php搜索"公共函数check()",你应该找到它,但最后一个条件是你必须绝对满足的。

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

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

无法在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)); 

在这种情况下,您可以通过查询:days = 33找到拥有"星期一"answers"星期六"的所有用户。真快。

如果你根本不关心数据,你可以这样写:

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

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