我有以下代码
$tecnico = Tecnico::with('servicios')->where('Auth_Token',$auth)->firstOrFail();
if($tecnico != ''){
$servicios = $tecnico->servicios;
$servicio = $servicios->where('idServicio', $id);
}
Servicio
有很多Tecnico
而Tecnico
有很多Service
在这种情况下,我只需要Tecnico
中的Auth_token
以后还需要Servicio
中的所有Tecnico
,但需要按id
进行过滤上面代码出现以下错误
Symfony \ Component \ Debug \ Exception \ FatalErrorException
Call to undefined method Illuminate\Database\Eloquent\Collection::where()
$servicio = $servicios->where('idServicio', $id);
中的
我该如何解决?
答案 0 :(得分:3)
你可以试试这个:
$tecnico = Tecnico::with(array('servicios' => function($q) use ($id) {
$q->where('idServicio', $id);
}))->where('Auth_Token',$auth)->firstOrFail();
因此,您将获得其相关Tecnico
等于Servicio->id
的{{1}}模型,然后您可以使用$id
获取第一个$tecnico->servicios->first()
如果集合中有多个Servicio
(很可能不会),那么您可以使用Servicio
循环(基本上在foreach
中)。您可以在view
网站上查看有关this aka Eager Load Constraints的更多信息。
答案 1 :(得分:3)
回答你的问题是:
// if idServicio is set as primary key on Servicio model
$servicio = $tecnico->servicios->find($id);
// in case idServicio was just a property and not necessarily unique do this:
// it return Collection of Servicio models matching $id
$servicio = $recnico->servicios->filter(function ($servicio) use ($id) {
return $servicio->idServicio == $id;
});
无论如何,如果你真的只需要那个特定的Servicio
,请使用像@WhereWolf建议的急切加载约束,而不是过滤集合。