我可以使用 Laravel 5 功能来保存每个公司每个用户的位置吗?

Can I use Laravel 5 functionality to save positions per company per user?

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

我也是Laravel 5的新手。我看过 Fundamental 视频系列(尤其是 "syncing tags" 并且它适用于简单的 pivot tables)并且搜索了论坛并进一步在线但实际上我什至不确定我正在搜索的是实现我的愿望的正确方法。

我正在尝试 create/update/edit 用户的个人资料来跟踪他们的工作经历。所以一个用户可以有多个职位,这些职位要链接到公司。

我希望将公司 table 分开,以便用户可以从下拉列表中 select 现有公司。对于位置也是如此 - 如果存在位置,例如 "CEO",我希望用户能够 select 而不是添加新位置。

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

<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 克隆以允许用户添加新的职位和公司集

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

}

这在视觉上做了我想要的,但没有像我预期的那样发布一系列职位和公司。

所以,我苦恼的是如何保存/同步用户、职位和公司。

我为 company_user、position_user 和 company_position 创建了枢轴 tables,如下所示:

company_user:
company_id
user_id

position_user
position_id
user_id

company_position
company_id
position_id

并设想了如下场景:

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

但我不知道如何同步职位和公司,因为可能需要先创建它们。基本上是想弄清楚如何保持职位和公司之间的关系,尤其是因为每个用户可能有多个职位和公司。

编辑

所以我正在尝试将 company_ID 添加到 position_user 的建议 table。

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

我正在使用 withPivot:

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

将 company_id 字段添加到主元 table。但是我不确定在必须首先创建该 id 字段时如何将该字段添加到数组中。

关注 Laracasts - 23 - 同步标签,我正在使用

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

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

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

请注意,可以克隆职位和公司字段,因此可能存在多个 "sets" 职位和公司。

我会有三个 table:userscompanieswork_historywork_history 将是您的支点 table,但有一些额外的列:job_titlestart_dateend_date。这样,一个用户可以拥有并属于许多工作角色。

如果您希望重新使用角色,则可以将 work_history table 中的 job_title 列替换为 position_id 列。

我问了另一个问题 - (由@lukasgeiter 回答) - 这帮助我解决了我的问题,所以我想将这个问题标记为已关闭。