4 Stimmen

Wie speichert man ein Array() in einer RedBean-Eigenschaft?

Ich habe das Folgende erhalten:

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

Der Teil "Tage" des Beitrags lautet:

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

Alles, was ich tun möchte, ist in $pushUser-dagen das Array mit Tagen zu speichern :)... ziemlich einfach huh?

Aber dann bekomme ich diese Fehler:

Ausnahme 'RedBean_Exception_Security' mit der Meldung 'Ungültige Bohne: Eigenschaft dagen ' in E:\Documenten\Dropbox\Dropbox\dummy -htdocs \VID_service\vid_push\libs\rb.php :3465 Stack-Trace: #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}

Ist es nicht möglich, Arrays in einem RedBean-Objekt zu speichern?

4voto

Hash Borgir Punkte 61

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

Überprüfen Sie import() . Sie müssten Ihre Arrays für die Speicherung von Schlüssel/Wertpaaren als Spalte/Zeile usw. formatieren.

$bean->import($array);

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

und so weiter. Sie können immer Array- oder Regex-Suchfunktionen verwenden, um Ihren Wert zu finden oder Ihr Array so zu formatieren, dass Redbean es versteht, wobei Array ein Schlüssel/Wert ist und der Schlüssel bestimmten Regeln folgen muss, die in der check()-Funktion in Redbean definiert sind, ich kann mich nicht aus dem Stegreif erinnern, öffnen Sie einfach rb.php und suchen Sie nach "public function check(" und Sie sollten es finden, aber die letzte Bedingung ist das, was Sie unbedingt erfüllen müssen.

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

es darf kein Array oder Objekt sein, und die Eigenschaft muss ein String > strlen von 2 sein, sonst wird eine ungültige bean: property ..... Ausnahme ausgelöst. Es muss ein flaches Array von Schlüssel=Wert sein und Sie können es einfach importieren.

Ich hoffe, das hilft.

3voto

Gabor de Mooij Punkte 2987

Es gibt keine Möglichkeit, Arrays in Beans zu speichern, da RedBeanPHP nicht vorhersagen kann, wie das Array in der Datenbank dargestellt werden soll.

Die Lösung hängt davon ab, was Sie später mit diesen Informationen machen wollen. Wollen Sie andere Dinge als nur Wochentage hinzufügen, wie Abende oder Überstunden (im Falle einer Terminplanung?), würde ich mich in diesem Fall für die flexibelste und dennoch einfachste Lösung entscheiden:

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

Da wir sharedDay anstelle von ownDay verwenden, werden die Datensätze nicht dupliziert. Diese Lösung schafft eine übersichtliche Verknüpfungstabelle day_user.

Natürlich müssen Sie die Wochentage einmal in der Datenbank speichern:

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

Wenn Sie einen Benutzer mit einem bestimmten Wochentagsprofil schnell ausfindig machen wollen, können Sie die Tage kodieren:

//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)); 

In diesem Fall können Sie jeden Benutzer finden, der "Montag" und "Samstag" hat, indem Sie abfragen: days = 33. Das ist wirklich schnell.

Wenn Ihnen die Daten völlig gleichgültig sind, können Sie sich für die Option entscheiden:

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

1voto

Or Arbel Punkte 2915

Eine Lösung besteht darin, das Array mit serialize($array) zu serialisieren, bevor es in der Bean gespeichert wird, und es beim Abrufen zu deserialisieren($array).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X