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

Posted

技术标签:

【中文标题】laravel 5.1 雄辩的选择与前缀连接表【英文标题】:laravel 5.1 eloquent select with prefix joined table 【发布时间】:2016-10-05 15:12:21 【问题描述】:

我有这个问题

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

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

$order->customer_name $order->收银员姓名

通过上面的查询,我只得到一个名称行,因为每个表都有相同的列名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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

如何为所有列创建别名?我想为这样的所有列命名customer_,并且每个表有 10 - 20 列,所以我不想一个一个地添加别名【参考方案3】:

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

等等,您可以根据需要从数据库中选择任意数量的字段并为其指定别名。

【讨论】:

是的,我知道这一点,但我不想一一选择,因为我有很多列用于该查询,所以就像我上面所说的,我想使用*。例如我想像这样选择customer.* as customer_,所以我所有的客户列都是前缀customer_ 然后你可以使用link访问器和修改器。所以在你的客户模型中,如果你想要名字,那么codepublic function getNameAttribute($value) return "customer_".$value; 问题是当我在没有别名的情况下运行查询时,我的类似列名将相互替换。我只从收银员那里得到一个名字,没有从客户那里得到名字 @martiendt 使用原始查询并通过 Eloquent 模型加入,并且在模型中使用我在上列中提到的 mutators,那么您将获得所需的结果。或者你可以使用这里提到的关系***.com/questions/29165410/…

以上是关于laravel 5.1 雄辩的选择与前缀连接表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Lumen 雄辩的左连接返回连接表数据而不是主数据

来自DB的Laravel雄辩错误选择数据

Laravel 雄辩的查询与条件下另一个表中的值的总和

Laravel雄辩查询与相关表的总和

在laravel [实现过滤器]中将多个表与雄辩和急切的加载一起加入

在 Laravel 中迁移外键与雄辩的关系