代码之家  ›  专栏  ›  技术社区  ›  martiendt

laravel 5.1带前缀连接表的雄辩选择

  •  6
  • martiendt  · 技术社区  · 8 年前

    我有这个问题

    $sales = Sales::join('customer', 'customer.id', '=', 'sales.customer_id')
    ->join('cashier', 'cashier.id', '=', 'sales.cashier_id')
    ->first();
    

    如何选择带前缀的每个表,以便这样调用:

    • $订单->客户名称
    • $订单->出纳姓名

    对于上面的查询,我只得到一个名称行,因为每个表都有相同的列名 name 什么 我想在我调用的每个表中加前缀 customer_ , cashier_ , sales_

    使现代化

    我所期望的结果是这样的

    customer_name
    customer_address
    customer_phone
    cashier_name
    cashier_another_column
    cashier_another_column2
    sales_date
    sales_another_column
    sales_another_column2
    
    3 回复  |  直到 8 年前
        1
  •  8
  •   Viony Veronica    8 年前

    答案是你不能那样做。我通常只给相同的列名取别名,其余的用 * 因此,您需要为所有相同的列名设置别名以解决冲突

    Sales::join('customer', 'customer.id', '=', 'sales.customer_id')
    ->join('cashier', 'cashier.id', '=', 'sales.cashier_id')
    ->select(['*', 'customer.name as customer_name', 'cashier.name as cashier_name'])
    ->get();
    
        2
  •  0
  •   Himanshu Raval    8 年前

    您必须使用select,然后可以为列名指定别名。

    例如。

    $sales = Sales::join('customer', 'customer.id', '=', 'sales.customer_id')
    ->join('cashier', 'cashier.id', '=', 'sales.cashier_id')
    ->select('customer.name as customer_name','cashier.name as cashier_name')
    ->first();
    

    依此类推,您可以从数据库中选择任意多个字段,并为其指定别名。

        3
  •  0
  •   sudhirk496    8 年前
    Use get() method and add alias to column name. You can add toArray() after get() to get result in array.
    $sales = Sales::join('customer', 'customer.id', '=', 'sales.customer_id')
        ->join('cashier', 'cashier.id', '=', 'sales.cashier_id')
        ->get(['customer.name as customer_name', 'cashier.name as cashier_name'])
        ->toArray();