【发布时间】:2016-01-07 10:11:55
【问题描述】:
我已经定义了从 warehouse_transfer 表到 warehouse 表的两个外键。
我尝试了两种方法来实现我的 Laravel Eloquent Query,但两种方法都不起作用
两个外键引用同一个表,
warehouse_transfer:
1 id int(11)
2 date timestamp
3 from_warehouse_id int(11) references warehouse
4 to_warehouse_id int(11) references warehouse
5 staff_id int(11)
6 itp timestamp
7 utp timestamp
仓库:
1 id int(11)
2 name varchar(500)
现在在从仓库表中检索我想要名称的数据时,
步骤 - 1:
WarehouseTransfer::select("warehouse_transfer.*,staff.name as staff_name,warehouse.name AS from_warehouse_name,warehouse.name AS to_warehouse_name")
->leftjoin('staff', 'staff.id', '=', 'warehouse_transfer.staff_id')
->leftJoin('warehouse', 'warehouse.id', '=', 'warehouse_transfer.from_warehouse_id')
->leftJoin('warehouse', 'warehouse.id', '=', 'warehouse_transfer.to_warehouse_id')
->paginate(10)
上面写着,
1066 不是唯一的表/别名:
oops_warehouse
步骤 - 2:
WarehouseTransfer::select("warehouse_transfer.*,staff.name as staff_name,w1.name AS from_warehouse_name,w2.name AS to_warehouse_name")
->leftjoin('staff', 'staff.id', '=', 'warehouse_transfer.staff_id')
->leftJoin('warehouse AS w1', 'w1.id', '=', 'warehouse_transfer.from_warehouse_id')
->leftJoin('warehouse AS w2', 'w2.id', '=', 'warehouse_transfer.to_warehouse_id')
->paginate(10)
上面写着,
未找到列:1054 Unknown column
oops_w1.idin 'on Clause'
所以最终问题是 leftjoin 表上的别名不起作用
【问题讨论】:
-
第二个版本适合我。确保将字符串数组传递给 select(),而不是单个字符串,否则传递的整个字符串将用作列名,这将导致其他错误。如果没有帮助,请使用 toSql() 转储生成的查询并检查它是否正确。我得到了正确的表别名。
-
我在所有表中都有默认前缀是问题吗?不适合我
-
在我这样做之前
DB::enableQueryLog(); print_r(DB::getQueryLog());它给出了错误。 -
再次运行 toSql() 来获取查询,而不是 get()。尝试运行此查询会导致错误,因此您甚至希望能够访问您的 print_r() cal
标签: php mysql laravel eloquent left-join