【问题标题】:Laravel 5.1 left join alias issue two foreign key on same tableLaravel 5.1 左连接别名在同一张表上发出两个外键
【发布时间】: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.id in 'on Clause'

所以最终问题是 leftjoin 表上的别名不起作用

【问题讨论】:

  • 第二个版本适合我。确保将字符串数组传递给 select(),而不是单个字符串,否则传递的整个字符串将用作列名,这将导致其他错误。如果没有帮助,请使用 toSql() 转储生成的查询并检查它是否正确。我得到了正确的表别名。
  • 我在所有表中都有默认前缀是问题吗?不适合我
  • 在我这样做之前DB::enableQueryLog(); print_r(DB::getQueryLog()); 它给出了错误。
  • 再次运行 toSql() 来获取查询,而不是 get()。尝试运行此查询会导致错误,因此您甚至希望能够访问您的 print_r() cal

标签: php mysql laravel eloquent left-join


【解决方案1】:

我丢失了我使用过的DB::raw(),问题已经解决,

// Warehouse Transfer From
if (in_array('from_warehouse_id', $columns)) {
    $q->addSelect(DB::raw("fromw.id as from_warehouse_id, fromw.name from_warehouse_name"))
    ->leftjoin(DB::raw('oops_warehouse AS fromw'), DB::raw('fromw.id'), '=', 'warehouse_transfer.from_warehouse_id');
}

// Warehouse Transfer To
if (in_array('to_warehouse_id', $columns)) {
    //$q->addSelect('warehouse_transfer.to_warehouse_id', 'warehouse.name AS to_warehouse_name');
    $q->addSelect(DB::raw("tow.id as to_warehouse_id, tow.name to_warehouse_name"))
    ->leftjoin(DB::raw('oops_warehouse AS tow'), DB::raw('tow.id'), '=', 'warehouse_transfer.to_warehouse_id');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多