php - 如何使用 eloquent 在 laravel 中编写多重连接

标签 php mysql laravel join eloquent

我正在学习 Laravel。我想使用 eloquent 在 laravel 中编写以下查询:

 select b.branch_name, w.branch_work_name from branches AS b, branch_work_metadata AS w, branch_work_lookup AS bw where b.branch_id = bw.branch_id AND w.branch_work_id = bw.branch_work_id

以上查询在 phpmysql 中完美运行

每个表的模型如下:

表:分支 --- 模型:分支

表:branch_work_metadata --- 模型:BranchWorkMetadata

表:branch_work_lookup --- 模型:BranchWorkLookup

当我尝试在 Laravel 中编写上述查询时,它给了我错误

 $branch = DB::table('branches as b', 'branch_work_metadata as w', 'branch_work_lookup as bw')
               ->select('b.branch_name','w.branch_work_name')
               ->join('b.branch_id','=','bw.branch_id')
               ->join('w.branch_work_id','=','bw.branch_work_id') 
               ->get();  

上面给了我错误

Illuminate\Database\QueryException
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'b.branch_id' doesn't exist (SQL: select `b`.`branch_name`, `w`.`branch_work_name` from `branches` as `b` inner join `b`.`branch_id` on `=` = `bw`.`branch_id` inner join `w`.`branch_work_id` on `=` = `bw`.`branch_work_id`)

还尝试了以下方法:

$branch = BranchWorkLookup::Join('branches.branch_id','=','branch_work_lookup.branch_id')
                ->Join('branch_work_metadata.branch_work_id','=','branch_work_lookup.branch_work_id')
                ->select(
                    'branches.branch_name',
                    'branch_work_name'
                    )
                ->get();

报错

Illuminate\Database\QueryException
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'branches.branch_id' doesn't exist (SQL: select `branches`.`branch_name`, `branch_work_name` from `branch_work_lookup` inner join `branches`.`branch_id` on `=` = `branch_work_lookup`.`branch_id` inner join `branch_work_metadata`.`branch_work_id` on `=` = `branch_work_lookup`.`branch_work_id`)

出了什么问题吗?无法找到解决方案。请帮忙。提前致谢。

最佳答案

您正在尝试将旧式连接语法与 Laravel 查询生成器使用的现代版本混合在一起,这也是您应该使用的版本。试试这个:

$branch = DB::table('branches as b')
    ->select('b.branch_name', 'w.branch_work_name')
    ->join('branch_work_lookup as bw', 'b.branch_id', '=', 'bw.branch_id')
    ->join('branch_work_metadata as w', 'w.branch_work_id', '=', 'bw.branch_work_id')
    ->get();

需要明确的是,这是您应该使用的原始 MySQL 查询:

SELECT
    b.branch_name,
    w.branch_work_name
FROM branches AS b
INNER JOIN branch_work_lookup bw
    ON b.branch_id = bw.branch_id
INNER JOIN branch_work_metadata AS w
    ON w.branch_work_id = bw.branch_work_id;

关于php - 如何使用 eloquent 在 laravel 中编写多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59333373/

相关文章:

javascript - 使用 JavaScript/PHP 每 5 秒刷新一次 DIV

java - em.getTransaction().commit();导致jpa出错

php - 准备好的语句如何在 SQL 级别上工作?

php - 访问 public_html 级别之外/以下的文件

mysql - 在 Ubuntu 上重新安装 MySQL

当我尝试连接两个表时,Mysql 抛出 "Unknow column column_name in on clause"错误。

mysql - Laravel 订购当前至结束日期

java - Laravel exec() 在队列作业中

mysql - LARAVEL 5.5 外键约束的格式不正确'

javascript - 添加动态输入字段,从数组中分配新的 id