使用HasOne关系获取集合

时间:2016-09-21 15:07:56

标签: laravel-5 eloquent

在Laravel 5.2的用户模型中,我建立了与公司状态的关系设置。

public function companyStatus()
{
    return $this->hasOne('CompanyUser')->select('status');
}

CompanyUser表有一个company_id,user_id和status字段

然后在我的控制器中执行以下操作:

    $company   = Company::find($company_id);
    $users     = CompanyUser::where('company_id', $company_id)->pluck('user_id')->toArray();
    $user_data = User::with('companyStatus')->find($users);

但是当我转储user_data数组时,它拥有与公司相关的所有用户,但只显示 null 的状态关系

    {
       "id":2,
       "name":"Moderator",
       "email":"mod@company.com",
       "created_at":"2016-09-08 15:26:20",
       "updated_at":"2016-09-08 15:26:25",
       "company_status":null
     }

但是,如果我只将User集合返回到视图,并迭代每个用户并运行

$user->companyStatus->status 

显示值,但我尝试将其包含在集合中以供JSON API使用。

更新

我尝试将外键添加到我的关系方法的select调用中:

public function companyStatus()
{
    return $this->hasOne('CompanyUser')->select('status', 'user_id');
}

现在它返回以下内容:

    {
       "id":2,
       "name":"Moderator",
       "email":"mod@company.com",
       "created_at":"2016-09-08 15:26:20",
       "updated_at":"2016-09-08 15:26:25",
       "company_status": {"status":"1","user_id":"2"}
     }

不确定这是否是最佳/正确的方法。

1 个答案:

答案 0 :(得分:2)

好的,我明白了。

我尝试将外键添加到我的关系方法的select调用中:

{
   "id":2,
   "name":"Moderator",
   "email":"mod@company.com",
   "created_at":"2016-09-08 15:26:20",
   "updated_at":"2016-09-08 15:26:25",
   "company_status": {"status":"1","user_id":"2"}
 }

然后返回:

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i])

没有外键Laravel显然无法确定另一个表上的相关数据。