【发布时间】:2014-12-16 00:48:36
【问题描述】:
您好,当出现以下情况时,我正在尝试更新我的 tagtask 表(数据透视表):
例如,我们已经有一个包含 3 个标签的任务,例如营销、开发、会计。现在我们要编辑该任务并删除这 3 个标签并添加 1 个名为 Cooking 的标签。
所以我已经想到的是从 tagtask 表中删除这 3 个标签并添加标签“烹饪” 在 tagtask 表中。此外,我不会从标签表中删除标签,因为可能有一些任务使用市场营销、开发或会计标签。
不幸的是,关于第一部分我的想法我无法实现。为了向您展示我的尝试,我将首先向您展示我的一段代码:
{{Form::model($task,array('route'=>array('user.tasks.update', $task->id), 'method'=>'put'))}}
<ul>
<li>
{{Form::label('tag', 'tags')}}
<input type="text" name="tag_name" class="form-control" value='@foreach($task->tagtask as $tt){{$tt->tag['tag_name']}} @endforeach'>
</li>
<li>
{{Form::submit('Edit Task', array('class' => 'btn btn-default'))}}
</li>
</ul>
{{Form::close()}}
这是我的TaskController.php,其中包含以下代码:
<?php
public function update($id)
{
$task = Task::findOrFail($id);
$str = Input::get('tag_name');
//Split string by a regular expression
$arrayTags = preg_split('/[, ;]/', $str);
$tt_current = Tagtask::where('id_task', $id)->get();
$tags_raw = Tag::all();
$tags = array();
foreach($tags_raw as $tag)
{
$tags[$tag->tag_name] = $tag->id;
}
foreach($arrayTags as $tag)
{
if(!isset($tags[$tag])){
//The tag doesn't exist. So we store a tag and get a new ID.
$id_tag=DB::table('tags')->insertGetId(
array('tag_name' => $tag)
);
$data_TagTask= array(
'id_task' => $id,
'id_tag' => $id_tag
);
$id_tagtask=DB::table('tagtasks')->insertGetId($data_TagTask);
$row= DB::table('tagtasks')->where('id', $id_tagtask)->first();
} else {
//The tag does exist
foreach($tt_current as $tt)
{ //the following below is maybe wrong..
if ($tt->id_tag == $tags[$tag] && $tt->id_task == $row->id_task ) {
Tagtask::destroy($row->id_task);
}
//$tags[$tag->tag_name] = $tag->id;
//if(isset($tags_current[$id_task]))
//unset($tags_current[$id_task]);
}
}
}
//print_r($tags)
//die();
return Redirect::route('user.tasks.index');
}
所以我使用该代码实现的是,我可以删除视图中的 3 个标签(如前所述)并添加一个新标签进行更新。新的标签然后存储在tagtask表和tag表中,但问题是旧的3个标签还在tagtask表中。虽然他们应该被删除..有人可以帮助我吗?很高兴我在等你的答复。不管怎样,谢谢你的回答。
【问题讨论】:
标签: php html laravel eloquent blade