4

我得到以下信息:

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

帖子的“天”部分是:

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

我想要做的就是在 $pushUser-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(对象(RedBean_OODBBean))#3 {main}

不能将数组存储在 RedBean 对象中吗?

4

3 回答 3

4

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 并搜索“public function check(”,你应该会找到它,但最后一个条件是你必须绝对满足的。

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

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

我希望这会有所帮助。

于 2012-09-30T10:12:26.847 回答
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)); 

在这种情况下,您可以通过查询:days = 33 找到具有“monday”和“saturday”的每个用户。这真的很快。

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

//Quick and dirty solution
$user->days = implode(',',$days);
于 2011-12-29T13:26:28.277 回答
1

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

于 2013-06-18T15:32:59.437 回答