如何使用Laravel在数据库中插入多个选定的值

时间:2015-02-12 08:26:32

标签: html mysql select laravel-4

我是laravel的新手。我试图将列表框中的多个选择值插入数据库表。这是我使用的选择下拉列表的HTML:

<select name="tsubject[]" id="tsubject[]" multiple>
    <option value="0">select</option>
    <option value="English">English</option>
    <option value="Malayalam">Malayalam</option>
    <option value="Hindi">Hindi</option 
    <option value="Maths">Maths</option>
</select>

我的controller.php是

else{
    $teachers =new ForumTeacher(); 
    $teachers ->tsubject=Input::get('tsubject[]');
}

发生的错误如下;

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'tsubject' cannot be null (SQL: insert into `forum_teachers` (`tname`, `tmobile`, `ttype`, `tcls`, `tdivn`, `tsubject`, `updated_at`, `created_at`) values (NamithaP, 9876543211, normalteacher, 6, D, , 2015-02-12 09:09:16, 2015-02-12 09:09:16)) 

2 个答案:

答案 0 :(得分:0)

由于您希望获得输入,请使用$subjects = Input::get('tsubject');忘记[]。

如果您希望所有人都在同一个字段中,请执行以下操作;

$teachers =new ForumTeacher(); 
$teachers->tsubject = implode(',', Input::get('tsubject'));
$teachers->save();

或者,一旦您有输入,您可以执行以下操作以插入每个主题,如此;

foreach ($subjects as $subject){
    $teachers = new ForumTeacher(); 
    $teachers->tsubject = $subject;
    $teachers->save();
}

这将创建数据并将其保存到您的表格中。

我推荐的内容

根据您正在进行的查询,最佳做法是在单个字段中存储多个选项。我认为最好设置一个数据透视表来处理教师和科目之间的关系。

例如;

教师表数据(没有tsubject字段):
id,tname,tmobile,ttype,tcls,tdivn,updated_at,created_at
1,NamithaP,9876543211,normalteacher,6,D,2015-02-12 09:09:16,2015-02-12 09:09:16

主题数据透视表数据:
NamithaP的id,主题的id

主题表:
主题ID,数学
主题ID,英语
....

您可以阅读有关多对多关系船here的更多信息。

答案 1 :(得分:0)

我假设你有一个教师表和主题表,你有多对多的关系,并且在数据透视表中被链接&#39; subject_teacher&#39;

在laravel中使用刀片更容易。

首先在控制器中填写主题列表

$subjectsList= Subjects::lists('subjecName','id');
//    $previousSelectedSubjects = some optional selected subjects to
return View::make('yourview')->with('subjectsList', $subjectsList)->with('previousSelectedSubjects ', $previousSelectedSubjects);

然后在您的视图中使用它:

    {{ Form::select('subjects[]', $subjectsList, $previousSelectedSubjects->lists('id'), array('multiple'=>'multiple'))}}

并在您的控制器中,在发布数据后,使用提交的数据

 if (Input::has('subjects'))
    foreach(Input::get('subjects')as $subject)
    {
        $forumTeacher= new ForumTeacher; // I think this is your intermediat, pivot, table
        $forumTeacher->teacher_id= $id; // you should know how to find this id
        $forumTeacher->subject_id= $subject->id;        
        $forumTeacher->save();  
    }

如果有些事情不明确,请不要犹豫。