Нет способа хранить массивы в 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. Это действительно быстро.
Если вам не нужны данные, вы можете использовать:
//Quick and dirty solution
$user->days = implode(',',$days);