【发布时间】:2015-05-07 03:31:41
【问题描述】:
这是我的第一个问题,所以请原谅任何协议错误!
我也是 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 字段时将其添加到数组中。
以下 Laracasts - 23 - 同步标签,我正在使用
$user->positions()->sync($this->processPositions($positions));
processPositions 函数返回来自表单的位置的所有关联 id 的数组 - 无论它们以前存在还是新创建的。
但是我没有看到如何将 company_id 添加到此同步功能。
请注意,可以复制职位和公司字段,因此可能存在多个职位和公司“组”。
【问题讨论】:
-
好像很多公司可以有很多职位。如果我们同意一个用户只能在一家公司担任一次职位(不能在同一家公司担任两次 CEO),那么您可以将
company_id添加到position_user表中,而不是使用company_user表并放置唯一索引所有字段,或者不要让position_user表添加position_id到company_user并执行相同操作。听起来不错? -
嗨@PawelBieszczad,感谢您的回复。这听起来确实是一个可能的选择,我会进一步探索!
-
我正在努力让这个概念发挥作用,但我正在苦苦挣扎。我已将 company_id 添加到 position_user 表中,但当公司尚不存在时,看不到如何使用“同步”更新它。有什么建议吗?
-
如果公司还不存在,那用户怎么可能有职位呢?您需要先创建公司,然后再创建关系。
-
谢谢...我理解你的逻辑点——这就是我正在努力解决的问题。添加了对原始问题的一些更改。
标签: php jquery mysql laravel-5 pivot-table