如何使用newQuery()在Laravel中对表进行别名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用newQuery()在Laravel中对表进行别名相关的知识,希望对你有一定的参考价值。

我有一个名为cotacaoitensfranqueado的桌子,我想用cif称它,我知道我可以做DB::table('cotacaoitensfranqueado as cif')我在this question中看到的,但我想用我的模型做到这一点。

    $user = Auth::user();

    $model_cotacaoitensfranqueado = new Cotacaoitensfranqueado();

    $query = $model_cotacaoitensfranqueado->newQuery();
    $query->select('cotacaoitensfranqueado.*', 'c.status');
    $query->join('cotacao as c', [
       ['c.codigoconcentrador', 'cotacaoitensfranqueado.codigoconcentrador'],
       ['c.codigoempresa', 'cotacaoitensfranqueado.codigoempresa'],
       ['c.codigocotacao', 'cotacaoitensfranqueado.codigocotacao'],
    ]);
    $query->where('cotacaoitensfranqueado.codigoconcentrador', (int)$user->codigoconcentrador)
        ->where('cotacaoitensfranqueado.codigoempresa', (int)$codigoempresa)
        ->where('cotacaoitensfranqueado.codigofilial', $user->codigofilial)
        ->where('cotacaoitensfranqueado.codigocotacao', (int)$codigocotacao)
        ->where('c.status', 'A');

    $cotacao = $query->get();
答案

你不需要在Eloquent中使用newQuery()(int)

Cotacaoitensfranqueado::where('codigoconcentrador', auth()->user()->codigoconcentrador)->get();

但是如果你真的想使用它,请使用query(),因为newQuery()已被弃用。

另一答案

我意识到如何解决问题,你可以在模型中做别名

Cotacaoitensfranqueado.php

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Cotacaoitensfranqueado extends Model
{
    protected $table = 'cotacaoitensfranqueado as cif';
    public $timestamps = false;
}

控制器/ CotacaoController.php

...
use AppCotacaoitensfranqueado;

class CotacaoController extends Controller
{
   ...

   public function canSendBuy($codigoempresa, $codigocotacao){
        $user = Auth::user();

        $model_cotacaoitensfranqueado = new Cotacaoitensfranqueado();

        $query = $model_cotacaoitensfranqueado->query();
        $query->select('cif.*', 'c.status');
        $query->join('cotacao as c', [
           ['c.codigoconcentrador', 'cif.codigoconcentrador'],
           ['c.codigoempresa', 'cif.codigoempresa'],
           ['c.codigocotacao', 'cif.codigocotacao'],
        ]);
        $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();

        dd($cotacao);
    }

    ...

}

以上是关于如何使用newQuery()在Laravel中对表进行别名的主要内容,如果未能解决你的问题,请参考以下文章

如何在sqlite中对表中的行进行排名?

在休眠环境中对表使用单独的序列

如何在 PDO 语句中对表名进行参数化? [复制]

如何在Sql中对表进行分组?

如何在 Access 中对表的所有列进行 UNION ALL

在 asp.net MVC 中对表进行排序