Laravel 5.7: создание динамических запросов к базе данных - PullRequest
0 голосов
/ 27 марта 2019

Я создал динамический метод в моей модели аудита, каждый раз, когда создается новая транзакция, она будет добавляться в мою модель аудита.

В некоторых моих модулях я использовал другой столбец с именем «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быть строкой, заданным массивом ".В чем причина этого и как это исправить?

...