Laravel 5.7, Eloquent: 属性 [X] 在此集合实例上不存在,多对多关系
Laravel 5.7, Eloquent: Property [X] does not exist on this collection instance, Many to Many Relationship
我得到了这两个 tables(Estado(Status)和 Proyecto(Proyect)),它们之间有一个名为 EstadoProyecto(statusProyect)的枢轴 table,我正在尝试访问只有在 id_status(id_estado) 字段中有 2 或 3,并且具有最新日期的项目。它在使用 find(使用 2 或 3)时有效,但它给了我错误。 “ Eloquent: 属性 [proyectos] 在这个集合实例上不存在,多对多关系”试图将数组发送到 find 方法或使用 get 方法时。当我不使用只有一个值的 find 方法时,它给了我同样的错误。
这是我的模型,以及我正在尝试使用的查询。
model1 model2model3
这是目前有效的查询:
query
提前致谢。
迭戈 :)
您的查询是 return 集合,因为您的模型可能有多个条目 return 通过 Eloquent 提供的 find
方法编辑,因此您可以像这样使用 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
模型的实例。
否则,如果您打算使用原始方法中的某些东西,您可以使用 get
和 return 一个集合,您可以在 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
方法可以接受单个值或值数组作为参数,并且在没有值传递给它或值数组被传递的情况下传递给它时,可以 return 编辑集合而不是单个模型的实例。
另一方面,get
方法可以在不提供任何参数的情况下使用,并且每次都会 return 收集(尽管如果底层查询没有产生任何结果,这些方法仍然不能保存任何项目)
我得到了这两个 tables(Estado(Status)和 Proyecto(Proyect)),它们之间有一个名为 EstadoProyecto(statusProyect)的枢轴 table,我正在尝试访问只有在 id_status(id_estado) 字段中有 2 或 3,并且具有最新日期的项目。它在使用 find(使用 2 或 3)时有效,但它给了我错误。 “ Eloquent: 属性 [proyectos] 在这个集合实例上不存在,多对多关系”试图将数组发送到 find 方法或使用 get 方法时。当我不使用只有一个值的 find 方法时,它给了我同样的错误。 这是我的模型,以及我正在尝试使用的查询。 model1 model2model3
这是目前有效的查询: query 提前致谢。 迭戈 :)
您的查询是 return 集合,因为您的模型可能有多个条目 return 通过 Eloquent 提供的 find
方法编辑,因此您可以像这样使用 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
模型的实例。
否则,如果您打算使用原始方法中的某些东西,您可以使用 get
和 return 一个集合,您可以在 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
方法可以接受单个值或值数组作为参数,并且在没有值传递给它或值数组被传递的情况下传递给它时,可以 return 编辑集合而不是单个模型的实例。
另一方面,get
方法可以在不提供任何参数的情况下使用,并且每次都会 return 收集(尽管如果底层查询没有产生任何结果,这些方法仍然不能保存任何项目)