Laravel 如何使用查询生成器在数组中建立关系?拉维尔

Laravel 如何使用查询生成器在数组中建立关系?拉维尔,laravel,laravel-5,eloquent,laravel-6,laravel-query-builder,Laravel,Laravel 5,Eloquent,Laravel 6,Laravel Query Builder,我想与查询生成器建立关系。。。我有三个表,我想加入这些表以使用函数。。我在模特儿公司工作。。不在控制器中 这是我的职责 public function map($contactabilidad): array { $relation = DB::table('tbl_lista_contactabilidad') ->join('tbl_equipo_postventaatcs', 'tbl_equipo_postventaatcs.id', '=', 'tbl_l

我想与查询生成器建立关系。。。我有三个表,我想加入这些表以使用函数。。我在模特儿公司工作。。不在控制器中

这是我的职责

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
    ];
}

Query\Builder最好被认为是雄辩者使用的主要工具,但它是一个完全不同的包。Query\Builder的目的是将SQL语法与输入到其中的逻辑解耦,而Eloquent的目的是将该逻辑与表结构和关系解耦。因此,只有Eloquent支持模型和关系类,而Query\Builder不支持。你的要求与关系有关,所以简而言之,你找错了方向

顺便说一句,我在这里区分“Query\Builder”,因为Eloquent也有它自己的类包装器,名为
Eloquent\Builder
,它共享大部分相同的语法。不管是好是坏,有说服力的尝试让开发者以熟悉的方式与之交互;不必跟踪一组新的方法名,即使您已通过magic
\uu调用
方法无缝地从Eloquent中退出并进入Query\Builder对象。它在雄辩\收集和支持\收集方面也做了类似的事情。但一开始这会让事情变得非常混乱,因为你必须知道你在和什么样的软件包说话

所以,要回答你的问题

  • 为三个表中的每个表构建一个模型类
  • 应用于每一个,以使用外键对模型进行预配置
  • 使用

另外需要注意的是,
with()
并没有要求Eloquent执行
JOIN
。它所做的只是运行父查询,从结果中提取键值,在
in()
语句中使用它们运行子查询,然后将结果合并在一起。这就是嵌套结果的结果。从经验上讲,在模型关系之外生成真正的连接语句并保持表别名的唯一性有点混乱,因此,这个包跳过尝试这样做是有意义的(多对多关系上的透视表除外)。不过,这还有一个额外的好处,即相关表不需要位于同一数据库中。另一方面,查询\Builder
join()
将在顶层显示所有表的所有字段。

Query\Builder最好被认为是Eloquent使用的主要工具,但并非如此,它是一个完全不同的包。Query\Builder的目的是将SQL语法与输入到其中的逻辑解耦,而Eloquent的目的是将该逻辑与表结构和关系解耦。因此,只有Eloquent支持模型和关系类,而Query\Builder不支持。你的要求与关系有关,所以简而言之,你找错了方向

顺便说一句,我在这里区分“Query\Builder”,因为Eloquent也有它自己的类包装器,名为
Eloquent\Builder
,它共享大部分相同的语法。不管是好是坏,有说服力的尝试让开发者以熟悉的方式与之交互;不必跟踪一组新的方法名,即使您已通过magic
\uu调用
方法无缝地从Eloquent中退出并进入Query\Builder对象。它在雄辩\收集和支持\收集方面也做了类似的事情。但一开始这会让事情变得非常混乱,因为你必须知道你在和什么样的软件包说话

所以,要回答你的问题

  • 为三个表中的每个表构建一个模型类
  • 应用于每一个,以使用外键对模型进行预配置
  • 使用
另外需要注意的是,
with()
并没有要求Eloquent执行
JOIN
。它所做的只是运行父查询,从结果中提取键值,在
in()
语句中使用它们运行子查询,然后将结果合并在一起。这就是嵌套结果的结果。从经验上讲,在模型关系之外生成真正的连接语句并保持表别名的唯一性有点混乱,因此,这个包跳过尝试这样做是有意义的(多对多关系上的透视表除外)。不过,这还有一个额外的好处,即相关表不需要位于同一数据库中。另一方面,查询\Builder
join()
将在顶层显示所有表的所有字段