繁体   English   中英

Laravel 5.7,Eloquent:此集合实例上不存在属性 [X],多对多关系

[英]Laravel 5.7, Eloquent: Property [X] does not exist on this collection instance, Many to Many Relationship

我得到了这两个表(Estado(Status)和 Proyecto(Proyect)),它们之间有一个 pivot 表,称为 EstadoProyecto(statusProyect),我试图仅访问 id_status(id_estado)中有 2 或 3 的项目) 字段,并且具有最近的日期。 它在使用 find(使用 2 或 3)时有效,但它给了我错误。 “ Eloquent:此集合实例上不存在属性 [proyectos],多对多关系”尝试将数组发送到 find 方法或使用 get 方法时。 当我不使用只有一个值的 find 方法时,它给了我同样的错误。 这是我的模型,以及我正在尝试使用的查询。 模型1模型2 模型3

这是现在有效的查询:查询提前致谢。 迭戈:)

您的查询返回一个集合,因为 Eloquent 提供的find方法返回的 model 可能有多个条目,因此您可以使用first一种方法,如下所示:

$estados = Estado::whereHas('proyectos', function ($query) {
    $query->whereIn('id_estado', [2, 3])
        ->orderBy('fecha_estado', 'DESC');
})
    ->with('proyectos', function ($query) {
        $query->whereIn('id_estado', [2, 3])
            ->orderBy('fecha_estado', 'DESC');
    })
    ->first();

使用上面的代码片段,要获得与这些条件匹配的多个结果,您只需将first方法替换为get

上面的代码为您提供了单个Estado model 的实例。

否则,如果您打算使用原始方法中的某些东西,您可以使用get并返回一个集合,您可以在 foreach 循环中迭代它们:

$estados = Estado::whereHas('proyectos', function ($query) {
    $query->orderBy('fecha_estado', 'DESC');
})
    ->with('proyectos')
    ->get();

foreach ($estados as $estado) {
    $estado->proyectos->id;
}

或者您可以像访问数组一样访问集合中的项目,前提是您知道结果中肯定有所需的条目:

$estados[0]->proyectos->id;

如果您只想获得一个结果,那么使用 Eloquent 的first一种方法通常是最好的选择。

我希望这有帮助!

额外信息:

Eloquent 中的find方法可以接受单个值或值数组作为参数,并且在没有传递给它的值或传递给它的值数组的情况下,可能会返回 Collection 而不是实例单个 model。

另一方面,可以在不提供任何 arguments 的情况下使用get方法,并且每次都会返回集合(尽管如果基础查询没有产生任何结果,这些仍然可以不包含任何项目)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM