无法通过orm
向db添加复选框值适用于普通字段,但如果在允许多个选项的复选框问题上选中了多个复选框,则不能使用
这是Form位
<?php echo Form::label('first_name', 'First Name')?><br />
<?php echo Form::input('first_name', $profile->first_name, array('class'=>'inputbox')); ?><br />
<?php echo Form::label('last_name', 'Last Name')?><br />
<?php echo Form::input('last_name', $profile->last_name, array('class'=>'inputbox')); ?><br />
Favorite Genres:
<label><input type="checkbox" value="Horror" name="genres[]" />
<strong>Horror</strong></label><br />
<label><input type="checkbox" value="Thriller" name="genres[]" />
<strong>Thriller</strong></label><br />
这是控制器位
if ($_POST) {
if ($profile->values($_POST)->check()) {
$profile->user_id = $user;
$profile->save();
}
}
这是模型位
protected $_rules = array(
'first_name' => array(
'not_empty' => NULL,
),
'last_name' => array(
'not_empty' => NULL,
),
);
只有在选中多个复选框时才能正常工作,我收到此错误
Database_Exception [1241]:操作数应包含1列
不确定最佳方法..我应该序列化还是内爆?在哪里这样做?
我想在将来构建基本搜索表单,使用此列搜索“like”值。
答案 0 :(得分:1)
这是DB
例外,而不是Validation
。您应该在这种情况下使用ORM关系:
class Model_Profile extends ORM {
protected $_has_many = array(
// profile has and belongs to many genres
'genres' => array(
'through' => 'profiles_genres', // pivot table name
),
);
}
然后更改当前个人资料的类型,如下所示:
try
{
$profile->check();
$profile->save();
// now replace old genres with a new list
// clear genres
$profile->remove('genres');
foreach($this->request->post('genres') as $genre)
{
$genre = ORM::factory('genre')->where('name', '=', $genre);
if ($genre->loaded())
{
$profile->add('genres', $genre);
}
}
}
catch (Validate_Exception)
{
// wrong input
}
请注意,genres
不是分隔表,而不是profiles
列。此外,您还需要一个包含profiles_genres
和profile_id
列的数据透视表genre_id
。
答案 1 :(得分:0)
您应该创建一个流派表和模型,并为流派和个人资料创建一个数据透视表:
CREATE TABLE IF NOT EXISTS `genres` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `genres_profiles` (
`profile_id` int(10) UNSIGNED NOT NULL,
`genre_id` int(10) UNSIGNED NOT NULL,
PRIMARY KEY (`profile_id`,`genre_id`),
KEY `fk_genre_id` (`genre_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
请注意,您不需要为数据透视表创建ORM模型 您可以在official docs
中找到更多信息