我有以下代码

$tecnico = Tecnico::with('servicios')->where('Auth_Token',$auth)->firstOrFail();
        if($tecnico != ''){
            $servicios = $tecnico->servicios;
            $servicio = $servicios->where('idServicio', $id);
        }
Servicio 有很多 TecnicoTecnico 有很多 Service
在这种情况下,我只需要来自 TecnicoAuth_token 稍后还需要来自该 Servicio 的所有 Tecnico 但通过 id 过滤当我运行上面的代码时出现以下错误
Symfony \ Component \ Debug \ Exception \ FatalErrorException
Call to undefined method Illuminate\Database\Eloquent\Collection::where()

$servicio = $servicios->where('idServicio', $id);

我该如何解决?

最佳答案

你可以试试这个:

$tecnico = Tecnico::with(array('servicios' => function($q) use ($id) {
    $q->where('idServicio', $id);
}))->where('Auth_Token',$auth)->firstOrFail();

因此,您将获得相关 Tecnico 等于 Servicio->id$id 模型,然后您可以使用 $tecnico->servicios->first() 来获取第一个 Servicio 并且如果集合中有多个 Servicio(很可能不会),那么您可以使用foreach 循环(基本上在 view 中)。您可以在 Laravel 网站上查看有关 this aka Eager Load Constraints 的更多信息。

关于php - 如何在 Laravel 中过滤集合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23301108/

10-16 07:20