如何在Laravel中使用newQuery()为模型对应表设置别名?
如何在Laravel模型查询中设置表别名
在Laravel里用模型给表设置别名其实很简单,你不需要修改模型的核心配置,只需要在构建查询实例的时候通过from()方法指定表的别名即可。下面是针对你现有代码的修改版本:
$user = Auth::user(); $model_cotacaoitensfranqueado = new Cotacaoitensfranqueado(); $query = $model_cotacaoitensfranqueado->newQuery() // 这里指定表的别名cif ->from('cotacaoitensfranqueado as cif'); // 修改select语句,用别名cif代替原表名 $query->select('cif.*', 'c.status'); // 关联条件里也替换成别名cif $query->join('cotacao as c', [ ['c.codigoconcentrador', 'cif.codigoconcentrador'], ['c.codigoempresa', 'cif.codigoempresa'], ['c.codigocotacao', 'cif.codigocotacao'], ]); // 所有where条件里的原表名也替换成cif $query->where('cif.codigoconcentrador', (int)$user->codigoconcentrador) ->where('cif.codigoempresa', (int)$codigoempresa) ->where('cif.codigofilial', $user->codigofilial) ->where('cif.codigocotacao', (int)$codigocotacao) ->where('c.status', 'A'); $cotacao = $query->get();
补充:如果需要复用别名(可选)
如果你在很多地方都需要给这个模型的查询设置别名,可以在模型里定义一个本地作用域,这样每次调用更方便:
// 在Cotacaoitensfranqueado模型中添加 public function scopeAsCif($query) { return $query->from('cotacaoitensfranqueado as cif'); }
然后在查询的时候直接调用:
$query = $model_cotacaoitensfranqueado->newQuery()->asCif(); // 后续的select、join、where就可以直接用cif作为表别名了
这样不管是单次查询还是复用场景,都能轻松实现表别名的需求。
内容的提问来源于stack exchange,提问作者SpaceDogCS
相关产品推荐
相关产品推荐

