laravel 5.1 eloquent select 加入前缀 table

laravel 5.1 eloquent select with prefix joined table

我有这个问题

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

我如何 select 每个 table 都带有前缀,这样我就可以这样调用 :

对于上面的查询,我只得到一个名称行,因为每个 table 具有相同的列名 name,什么 我想要的是在每个 table 中给出前缀,例如 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

你必须使用 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();

等等,您可以从数据库中 select 任意多的字段,并为它们指定别名。

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();

答案是你不能那样做。我通常只为相同的列名取别名,其余的取 *。所以你需要为所有相同的列名起别名来解决冲突

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();