Laravel - 根据用户company_id显示选择列表菜单选项

时间:2014-09-08 19:13:55

标签: laravel-4

我试图找到一种方法,只显示属于用户公司的选择菜单中的选项。

我在用户,user_profile,公司和部门之间建立了关系。

现在在我的user_profile编辑中,我希望能够从部门列表中选择一个部门。 但该列表应仅包含属于用户公司的部门。

这是我的UserProfilesController的编辑功能

public function edit($username)
{
    $user = User::with('user_profile.company', 'user_profile.location', 'user_profile.department', 'user_profile.title')->whereUsername($username)->firstOrFail();

    $companies = Company::lists('name', 'id'); //get companies for drop menu
    $locations = Location::lists('name', 'id'); //get locations for drop menu
    $departments = Department::lists('name', 'id'); //get departments for drop menu
    $titles = Title::lists('name', 'id'); //get titles for drop menu
    //dd($user->toArray());
    return View::make('user_profiles.edit', compact('user', 'companies', 'locations', 'departments', 'titles'));
}

如何在$ departments变量上查询?有Laravel方式吗?现在我得到了所有的部门。我只想获得属于用户公司的部门。

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您有Company hasMany Department关系设置:

$departments = $user->user_profile->company->departments->lists('name', 'id');

另外,我建议将你的关系重命名为camelCase,因为这是Eloquent将它们作为动态属性读取的方式。

话虽如此,除非您明确加载(withload)关系,否则您无法执行此操作:

$user = User::first();
$user->user_profile; // null

// but if relation was userProfile, then you can do either:
$user->userProfile;
$user->user_profile; // this could be called as a dynamic property, but stick to 1 convention