2016-06-29 26 views
0

的关系考虑一个模型雇员和模型项目Laravel /流明 - 限定与参数

雇员表有一个属性类型可以分配下列值“1”, “2”, “3” 等

项目的hasMany雇员

public function programmers() { 
    return $this->hasMany('App\Employee') 
     ->where('type', '1'); 
} // hasMany programmers 

public function testers() { 
    return $this->hasMany('App\Employee') 
     ->where('type', '2'); 
} // hasMany testers 

public function managers() { 
    return $this->hasMany('App\Employee') 
     ->where('type', '3'); 
} // hasMany managers 

相反,这些关系的,我想只有一个:

public function employees($type_id) { 
    return $this->hasMany('App\Employee') 
     ->where('type', $type_id); 
} // hasMany employees 

它的工作是这样的:

$app->get('/employee', function() { 
    $project = App\Employee::find(1); 
    return $project->employees("1"); 
}); 

不过,我收到以下异常:

ErrorException in Response.php line 402: 
Object of class Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string 

回答

1

查看错误消息的内容:

ErrorException在Response.php线402: 对象类照亮\数据库\锋\关系\的hasMany不能转换为字符串

的错误发生在Response类中。这个错误是来了的原因是因为你在你的路由定义返回关系而非响应

$app->get('/employee', function() { 
    $project = App\Employee::find(1); 
    return $project->employees("1"); 
}); 

一个关系对象不能转换为字符串,所以Response类不知道该怎么办。

如果您想检查浏览器中关系查询的结果,则需要返回valid response

试着改变你的路线是这样的:你的查询JSON的

$app->get('/employee', function() { 
    $project = App\Employee::find(1); 
    return response()->json($project->employees("1")->get()); 
}); 

这将输出结果。还请注意使用get()。这确保关系查询实际执行。

+0

谢谢,也为广泛的解释 –