Laravel 5.7:创建动态数据库查询

时间:2019-03-26 22:44:05

标签: laravel-5.7 laravel-query-builder

我在审计模型中创建了一个动态方法,每当有新创建的事务时,它将被添加到审计模型中。

我的某些模块中,我使用了另一个名为“标签”的列来确定该模块是否不存在(我使用标签是因为我将其存储在同一张表中)。

示例

Module 1 - doesnt have tag column (different table from module 2 and 3)
Module 2 - does have tag column which is 0 (same table from module 3)
Module 3 - does have tag column which is 1 (same table from module 2)

场景

I created new transaction in module 1, now it will be Audit
I created new transaction in module 2, now it will be Audit
I created new transaction in module 3, now it will be Audit

这是我到目前为止所做的。

控制器

$tag                            = array('purchase_tag' => '1');
$number                         = AuditTrailModel::getLastNumber('purchases',$tag);

审计跟踪模型

public static function getLastNumber($table,$tag)
{
    if($tag)
    {
        return DB::table($table)
                ->select('number')
                ->where($tag)
                ->where('company_id',Auth::user()->company_id)
                ->orderBy('number','desc')
                ->first();  
    }
    else
    {
        return DB::table($table)
                ->select('number')
                ->orderBy('number','desc')
                ->where('company_id',Auth::user()->company_id)
                ->first();
    }
}

一切正常,但我想改善代码。

问题:是否有其他方法可以缩短我的代码而不重复所有操作?(我在if中引用return ...)

更新:

控制器

$tag                            = array('purchase_tag' => '1');
$company_id                     = Auth::user()->company_id;
$order_by                       = array('number' => 'desc');
$number                         = AuditTrailModel::getLastNumber('purchases',$tag,$company_id,$order_by);

审计跟踪模型

public static function getLastNumber($table,$tag,$company_id,$order_by)
{
    $query = DB::table($table);
    $query->select('number');   
    if($tag)
    {
        $query->where($tag);
    }
    if($company_id)
    {
        $query->where($company_id);
    }
    if($order_by)
    {
        $query->orderBy($order_by);
    }
    //$query->where($tag)
    //$query->where('company_id',Auth::user()->company_id)
    //$query->orderBy('number','desc')
    //      ->first();  
    $result = $query->first();
    return $result;
    // else
    // {
    //  return DB::table($table)
                // ->select('number')
                // ->orderBy('number','desc')
                // ->where('company_id',Auth::user()->company_id)
                // ->first();
    // }
}

更新问题:我遇到一个错误“ strtolower()期望参数1为字符串,给定数组”。这是什么原因?如何解决?

0 个答案:

没有答案