这是我的第一个问题,因此请原谅任何协议错误!

我也是Laravel 5的新手。我已经观看了基本视频系列(尤其是“同步标签”,并且可以用于简单的数据透视表),并且已经搜索了论坛并进一步在线搜索,但实际上甚至不确定我在搜索什么是实现我希望的正确方法。

我正在尝试创建/更新/编辑用户的个人资料以跟踪他们的工作经验。因此,用户可以拥有多个职位,并且这些职位将与公司链接。

我希望公司表是分开的,以便用户可以从下拉列表中选择现有公司。职位也一样-如果存在一个职位,例如“ CEO”,我希望用户能够选择该职位,而不是添加一个新职位。

我创建了一个包含以下字段的表单:

<div class="workexperience">
<!--Work Experience / position   -->
<!--  Form Input -->
<div class="form-group">
{!!Form::label('positions_list', 'Work Experience:')!!}
{!!Form::select('positions_list', $positions, null, ['id'=> 'positions_list', 'class'=>'form-control','multiple'])!!}
</div>
<!--company-->
<div class="form-group" >
{!!Form::label('companies_list', 'Company:')!!}
{!!Form::select('companies_list', $companies, null, ['id'=>'companies_list','class'=>'form-control','multiple'])!!}
</div>
</div>
<div id="workexperience-placeholder"></div>
<a onclick="cloneMe('#workexperience')" class="btn btn-default btn-block"><span class="icon-entypo icon-plus"></span><b>Add Another</b></a>


并且正在使用jquery clone允许用户添加新的职位和公司集

function cloneMe(thisDiv)
{
$(thisDiv).clone(false).insertBefore(thisDiv+"-placeholder:last");

}


这在视觉上可以实现我想要的功能,但并没有像我期望的那样发布一系列职位和公司。

因此,我苦苦挣扎的是如何保存/同步用户,职位和公司。

我为company_user,position_user和company_position创建了数据透视表,如下所示:

company_user:company_id user_id

position_user position_id user_id

company_position company_id position_id

并设想了以下情况:

用户已创建,
职位链接到用户(使用同步方法)
公司与用户链接(使用同步方法)
职位与公司有联系(?)

但是我无法弄清楚如何同步职位和公司,因为可能需要先创建职位和公司。基本上是尝试找出如何保留职位和公司之间的关系,尤其是因为每个用户可能会有多个职位。

编辑

因此,我正在尝试将company_ID添加到position_users表的建议。

我无法解决的是如何同步来自职位和公司字段的信息,尤其是由于职位或公司当前可能存在或可能不存在于数据库中。

我正在使用withPivot:

public function users()
{
return $this->belongsToMany('App\User')->withPivot('company_id')->withTimestamps();
}


将company_id字段添加到数据透视表中。但是我不确定当必须先创建该ID字段时如何在该ID字段中添加该数组。

在Laracasts-23-同步标签之后,我正在使用

$user->positions()->sync($this->processPositions($positions));


其中processPositions函数返回来自表单的位置的所有关联ID的数组-不论它们以前存在还是新创建。

但是,我没有看到如何将company_id添加到此同步功能。

请注意,可以复制头寸和公司字段,因此可能存在多个“头寸”和“公司”集。

最佳答案

我将拥有三个表:userscompanieswork_historywork_history是您的数据透视表,但有一些额外的列:job_titlestart_dateend_date。这样,用户可以拥有并属于许多工作角色。

如果要重用角色,则可以将job_title表中的work_history列替换为position_id列。

10-06 11:45