Я создал динамический метод в моей модели аудита, каждый раз, когда создается новая транзакция, она будет добавляться в мою модель аудита.
В некоторых моих модулях я использовал другой столбец с именем «tag», чтобы определить, что этот модуль и другие отсутствуют (я использую тег, потому что я храню его в той же таблице).
Пример
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);
Audit Trail Model
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.)
Обновление:
Контроллер
$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быть строкой, заданным массивом ".В чем причина этого и как это исправить?