如何使用查询生成器在数组中建立关系?拉拉维尔
Posted
技术标签:
【中文标题】如何使用查询生成器在数组中建立关系?拉拉维尔【英文标题】:How to use Query Builder to make a relation in an array? Laravel 【发布时间】:2020-06-24 14:02:15 【问题描述】:我想与查询生成器建立关系...我有三个表,我想加入这些表以使用该函数。我在模型中工作..而不是在控制器中
这是我的功能
public function map($contactabilidad): array
$relation = DB::table('tbl_lista_contactabilidad')
->join('tbl_equipo_postventaatcs', 'tbl_equipo_postventaatcs.id', '=', 'tbl_lista_contactabilidad.postventaatc_id')
->join('users', 'users.id', '=', 'tbl_equipo_postventaatcs.asesor_id')
->get();
return [
$contactabilidad->$relation->name,
$contactabilidad->postventaatc_id,
$contactabilidad->rif,
$contactabilidad->razon_social,
$contactabilidad->fecha_contacto,
$contactabilidad->persona_contacto,
$contactabilidad->correo_contacto,
$contactabilidad->numero_contacto,
$contactabilidad->celular_contacto,
$contactabilidad->comentarios,
$contactabilidad->contactado,
$contactabilidad->respuesta->respuesta
];
【问题讨论】:
【参考方案1】:Query\Builder 最好被认为是 Eloquent 使用的主要工具,但它是一个完全不同的包。 Query\Builder 的目的是将 SQL 语法与输入它的逻辑分离,而 Eloquent 的目的是将逻辑与表结构和关系分离。所以只有 Eloquent 支持 Model 和 Relation 类,Query\Builder 不支持。而且您所要求的与关系有关,所以简而言之,您有点找错了树。
顺便说一句,我在这里区分“Query\Builder”,因为 Eloquent 也有自己的包装器,称为 Eloquent\Builder
,它共享大部分相同的语法。无论好坏,Eloquent 都试图让开发人员以熟悉的方式与之交互。即使您已经通过神奇的__call
方法无缝地退出 Eloquent 并进入 Query\Builder 对象,也不必跟踪一组新的方法名称。它在 Eloquent\Collections 与 Support\Collections 方面也做了类似的事情。但这一开始会让事情变得非常混乱,因为你只需要知道你在说什么包。
所以,回答你的问题...
为三个表中的每一个构建一个模型类 将relationship methods 应用于每个模型,以预先配置模型并了解您的外键 使用lazy or eager-loading 联系他们另外需要注意的是with()
确实不要求 Eloquent 执行 JOIN
。它所做的只是运行父查询,从结果中提取键值,在IN()
语句中使用它们运行子查询,然后将结果结合在一起。这就是嵌套结果的结果。从经验来看,从模型关系中生成真正的 JOIN 语句并保持表别名唯一是一种混乱,所以这个包只是跳过尝试这样做是有道理的(除了多对多关系上的数据透视表)。不过,这也有额外的好处,即您的相关表不需要存在于同一个数据库中。另一方面,Query\Builder join()
就像您在那里一样,将在顶层显示所有表的所有字段。
【讨论】:
以上是关于如何使用查询生成器在数组中建立关系?拉拉维尔的主要内容,如果未能解决你的问题,请参考以下文章