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