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访问器和修改器。所以在你的客户模型中,如果你想要名字,那么code
public function getNameAttribute($value) return "customer_".$value;
问题是当我在没有别名的情况下运行查询时,我的类似列名将相互替换。我只从收银员那里得到一个名字,没有从客户那里得到名字
@martiendt 使用原始查询并通过 Eloquent 模型加入,并且在模型中使用我在上列中提到的 mutators,那么您将获得所需的结果。或者你可以使用这里提到的关系***.com/questions/29165410/…以上是关于laravel 5.1 雄辩的选择与前缀连接表的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Lumen 雄辩的左连接返回连接表数据而不是主数据