Отображение двух несвязанных таблиц в Laravel

#laravel #datatables #sum #match #union

#laravel #таблицы данных #сумма #совпадение #объединение

Вопрос:

У меня проблема с двумя разными источниками таблиц, которые не имеют никакого отношения. Я думал, что смогу использовать ОБЪЕДИНЕНИЕ.

Я хочу отобразить обе таблицы и сопоставить номинальные данные. Отображаемые данные — это только дата, код, номинальная 1, номинальная 2 и результат.

Я использую таблицы данных в laravel 8

Это моя модель:

 class Fone extends Model
{
    protected $table = "fone";
    protected $fillable = ["date","f1","code","f2","cur","amount","region"];
}


class Gen extends Model
{
    protected $table = "gen";
    protected $fillable = ["date","g1","g2","g3","g4","amount","g5","code","cur","region"];
}
 

Это мой контроллер:

 public function getdatamatch() 
    {
$fone = DB::table('fone')
            ->select('fone.date','fone.code', DB::raw('SUM(fone.amount) as amount'))
            ->groupBy('date', 'code');
        $gen = DB::table('gen')
            ->select('gen.date','gen.code', DB::raw('SUM(genacct.amount) as amount'))
            ->groupBy('date', 'code')
            ->union($fone)
            ->get();


        return Datatables::of($gen)
            ->addIndexColumn()
            ->addColumn('result')
            ->make(true);
    }
 

Это мое мнение:

 <table id="datatable_match" class="table dt-responsive nowrap" style="width:100%">
                        <thead>
                            <tr>                                 
                                <th>DATE</th>   
                                <th>CODE</th>                        
                                <th>AMOUNT FONE</th>
                                <th>AMOUNT GEN</th> 
                                 <th>RESULT</th>                
                            </tr> 
                        </thead>
                        <tfoot>
                            <tr>                                 
                                <th>DATE</th>   
                                <th>CODE</th>                        
                                <th>AMOUNT FONE</th>
                                <th>AMOUNT GEN</th> 
                               <th>RESULT</th>                 
                            </tr> 
                        </tfoot>
                        <tbody>
                  
                        </tbody>
                 
                    </table>

<script>
    $(document).ready(function(){
        $('#datatable_match').DataTable({
            pageLength: 3,
            responsive:true,
            processing:true,
            serverside:true,
            ajax:"{{route('ajax.get.data.match')}}",

            columns:[
                {data:'date',name:'date'},
                {data:'code',name:'code'},
                {data:'fone.amount',name:'fone.amount',
                    render: $.fn.dataTable.render.number( '.', ',', 2, 'Rp.' )    
                    },
                {data:'gen.amount',name:'gen.amount',
                    render: $.fn.dataTable.render.number( '.', ',', 2, 'Rp.' )    
                    },  
    {data:'result',name:'result'}, 
            ],
});
    });
 

Фоновая таблица

 DATE        F1  CODE    F2  CUR AMOUNT  REGION
2020-12-02  0001    100003  0000    IDR -100.00 JAKARTA
2020-12-02  0002    100003  0000    IDR -200.00 BANDUNG
2020-12-02  0002    100006  0000    IDR -300.00 BANDUNG
2020-12-02  0002    100008  0000    IDR -400.00 BANDUNG
2020-12-02  0003    100003  0000    IDR 0.00    PALEMBANG
2020-12-02  0003    100006  0000    IDR -500.00 PALEMBANG
2020-12-02  0003    100008  0000    IDR -600.00 PALEMBANG
 

Таблица Gen

 DATE        G1          G2  G3      G4  AMOUNT  G5  CODE    CUR REGION
2020-12-02  009JKLMNOPQRSTU     1000    03AB    009ABCDEFGHI    -600.00 0001    100008  IDR PALEMBANG
2020-12-02  004JKLMNOPQRSTU     1000    06AB    000ABCDEFGHI    -200.00 0001    100003  IDR BANDUNG
2020-12-02  007JKLMNOPQRSTU     1000    08AB    076ABCDEFGHI    0.00    0001    100003  IDR PALEMBANG
2020-12-02  006JKLMNOPQRSTU     1000    08AB    076ABCDEFGHI    -400.00 0001    100008  IDR BANDUNG
2020-12-02  008JKLMNOPQRSTU     1000    08AB    076ABCDEFGHI    -500.00 0001    100006  IDR PALEMBANG
2020-12-02  005JKLMNOPQRSTU     1000    06AB    012ABCDEFGHI    -300.00 0001    100006  IDR BANDUNG
2020-12-02  003JKLMNOPQRSTU     1000    06AB    026ABCDEFGHI    -100.00 0001    100003  IDR JAKARTA
 

Я хочу отобразить группу данных по дате и коду с суммой.
Если номинальное значение совпадает, то результат СОВПАДАЕТ. Но если оно не совпадает, оно будет записано НЕ СООТВЕТСТВУЕТ.

 DATE        CODE    AMOUNT_FONE AMOUNT_GEN  RESULT
2020-12-02  100003  -300.00     -300.00     MATCH
2020-12-02  100006  -800.00     -800.00     MATCH
2020-12-02  100008  -1000.00    -1000.00    MATCH
 

Проблема в том, что я пока не могу отобразить СУММУ из таблицы Gen и сопоставить результаты двух номинальных значений.

Пожалуйста, помогите мне найти это решение. Заранее спасибо.

Редактировать

Наконец, я создал таблицу кода для отношения. Однако SUM и RESULT еще не запущены.

 $code = Code::join('gen','gen.id','=','code.id')
            ->join('fone','fone.id','=','code.id')
            ->select('fone.date','code', Fone::raw('SUM(fone.amount) as amount_fone'), Gen::raw('SUM(gen.amount) as amount_gen'))
            ->groupBy('date', 'code')
            ->get();
 

Но то, что работает на

 DATE        CODE    AMOUNT_FONE AMOUNT_GEN  RESULT
    2020-12-02  100003  -100.00     -100.00     
    2020-12-02  100006  -200.00     -200.00     
    2020-12-02  100008  -300.00     -300.00     
 

если в соответствии с вычислениями

 100003  = -100.00   -200.00   0.00 = -300.00 (query SUM = -100.00)
100006  = -300.00   -500.00 = -800.00 (query SUM = -200.00)
100008  = -400.00   -600.00 = -1000.00 (query SUM = -300.00)
 

Комментарии:

1. Поэтому, если вам нужно обработать две таблицы по-разному, не используйте запрос объединения. Работайте с результатами двух запросов для создания единого результата.

2. о, вот так, точнее, какой запрос вы можете использовать?

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

4. привет, наконец-то я создаю код таблицы для соединения. Но СУММА по-прежнему неверна, и нет столбца РЕЗУЛЬТАТОВ