我在审计模型中创建了一个动态方法,每当有新创建的事务时,它将被添加到审计模型中。
我的某些模块中,我使用了另一个名为“标签”的列来确定该模块是否不存在(我使用标签是因为我将其存储在同一张表中)。
示例
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为字符串,给定数组”。这是什么原因?如何解决?