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( Object(RedBean_OODBBean)) #3 {メイン}

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 の check() 関数で定義されている特定のルールに従う必要があることを Redbean が理解する方法で配列をフォーマットすることができます。ふと思い出したのですが、rb.php を開いて "public function check(" を検索すれば見つかるはずですが、最後の条件は絶対に満たさなければならないものです。

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

配列またはオブジェクトであってはならず、プロパティは文字列 > 2 の strlen でなければなりません。そうでない場合、無効な Bean: プロパティ ..... 例外がスローされます。key=value のフラットな配列である必要があり、簡単にインポートできます。

それが役立つことを願っています。

于 2012-09-30T10:12:26.847 に答える
3

RedBeanPHP は配列をデータベースでどのように表現するかを予測できないため、Bean に配列を格納する方法はありません。

解決策は、後でこの情報をどうしたいかによって異なります。夕方や残業など、平日以外のものを追加したいですか (スケジューリングの場合)。この場合、最も柔軟で簡単なソリューションを選択します。

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

ownDay の代わりに sharedDay を使用しているため、レコードは重複しません。このソリューションは、適切なリンク テーブル day_user を作成します。

もちろん、データベースに曜日を 1 回格納する必要があります。

 $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. これは非常に高速です。

データをまったく気にしない場合は、次の方法を使用できます。

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

1 つの解決策は、配列を bean に格納する前に serialize($array) を使用して配列をシリアライズし、取得するときに deserialize($array) を使用することです。

于 2013-06-18T15:32:59.437 に答える