Я пытаюсь загрузить файл Excel, он работает нормально, но у меня есть несколько столбцов json, поэтому, когда я пытаюсь включить эти столбцы, он не работает. Пока что я попробовал это.

public function salarySheetExcel($id)
    {
        $headers = array(
            "Content-type" => "text/csv",
            "Content-Disposition" => "attachment; filename=salary-sheet.csv",
            "Pragma" => "no-cache",
            "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
            "Expires" => "0"
        );

        $salariesOfMonth = SalaryArchive::find($id)->salaries;
        $columns = array('EmployeeCode', 'EmployeeName', 'Weekends','holidays','leaves','absent','present','inform' ,'late','Basic', 'Allowances', 'Allowance Amount',
            'Gross', 'Bonus', 'Overtime Logs', 'Overtime Amount','Net Salary','Deduction Logs','Deduction','PF','Total Salary');

        $callback = function() use ($salariesOfMonth, $columns)
        {
           $file = fopen('php://output', 'w');
            fputcsv($file, $columns);

            foreach($salariesOfMonth as $salary) {


                $salary=array($salary->employee->employee_code,$salary->attendance_log, $salary->employee->name, $salaries ,
                    $salary->basic,  $salary->allowance_amount,$salary->gross,
                    $salary->bonus,  $salary->overtime_amount,$salary->net_salary,
                    $salary->deduction,$salary->pf,$salary->total_salary);
                fputcsv($file, $salary);
            }
            fclose($file);
        };
        return Response::stream($callback, 200, $headers);
    } 

Это не работает , но когда я удаляю $ salary-> посещаемость , он работает нормально, потому что это мой столбец json . Пожалуйста, помогите мне разобраться

1
Tanvir Ahmed 26 Ноя 2019 в 15:09
Что именно не работает? Есть ли сообщения об ошибках? Колонка просто перепуталась? Если просто сказать, что это не работает, мы получим достаточно информации, чтобы попытаться вам помочь.
 – 
Dave
26 Ноя 2019 в 15:15
Если я использую столбец json в массиве, тогда браузер говорит, что страница, которую вы ищете, не найдена
 – 
Tanvir Ahmed
26 Ноя 2019 в 15:34
Проверьте мой ответ, дайте мне знать, если с этим возникнут какие-либо проблемы.
 – 
Ronak Chauhan
26 Ноя 2019 в 15:56

2 ответа

Данные JSON включают кавычки в строку, поэтому они не работают.

Используйте приведенный ниже код.

$salary=array($salary->employee->employee_code,addslashes($salary->attendance_log), $salary->employee->name, $salaries ,
                $salary->basic,  $salary->allowance_amount,$salary->gross,
                $salary->bonus,  $salary->overtime_amount,$salary->net_salary,
                $salary->deduction,$salary->pf,$salary->total_salary);
            fputcsv($file, $salary);
0
Ronak Chauhan 26 Ноя 2019 в 15:55
Он не работает, он говорит, что "добавляет слэш () ожидает, что параметр 1 будет строкой, заданным объектом"
 – 
Tanvir Ahmed
27 Ноя 2019 в 12:57
Обновите свой код, добавив косые черты (json_encode ($ salary-> посещаемость_log))
 – 
Ronak Chauhan
27 Ноя 2019 в 14:27
"выходные \": 4, \ "праздники \": 2, \ "листья \": 2, \ "отсутствующие \": 0, \ "настоящее \": 0, \ "информирующие \": 0, \ "поздно \ ": 0}
 – 
Tanvir Ahmed
27 Ноя 2019 в 15:19
Это будет так сейчас
 – 
Tanvir Ahmed
27 Ноя 2019 в 15:19

Я думаю, вам нужно использовать json_decode, прежде чем добавлять в fputcsv.

$log = json_decode($salary->attendance_log, true);

$weekends = isset( $log['weekends'] ) ? $log['weekends'] : '';
$holidays =  isset($log['holidays']) ? $log['holidays'] : '';
$leaves   =  isset($log['leaves']) ? $log['leaves'] : '';
$absent   =  isset($log['absent']) ? $log['absent'] : '';
$present  =  isset($log['present'] ? $log['present'] : '';
$inform   =  isset($log['inform']) ? $log['inform'] : '';
$late     =   isset( $log['late'] )? $log['late'] : '';


$salary=array($salary->employee->employee_code, $salary->employee->name, $weekends, $holidays, $leaves, $absent, $present, $inform, $late, $salaries ,
                $salary->basic,  $salary->allowance_amount,$salary->gross,
                $salary->bonus,  $salary->overtime_amount,$salary->net_salary,
                $salary->deduction,$salary->pf,$salary->total_salary);


fputcsv($file, array_merge($salary, $log));
0
Amit Senjaliya 26 Ноя 2019 в 16:13
Я уже пробовал это, это не работает, если я использую это, я получаю только Этот сайт недоступен Веб-страница по адресу localhost: 8000 / payment / salary-excel / 75 может быть временно недоступен или он мог навсегда переместиться на новый веб-адрес. ERR_INVALID_RESPONSE
 – 
Tanvir Ahmed
26 Ноя 2019 в 15:33
Если вы удалите $salary->attendance_log, тогда все будет нормально ??
 – 
Amit Senjaliya
26 Ноя 2019 в 15:37
Да, и если я кодирую json, это тоже работает, но в Excel это выглядит примерно так, но я хочу, чтобы каждый в отдельном столбце {"выходные": 4, "праздники": 2, "листья": 2, "отсутствующие": 0 , "present": 0, "inform": 0, "late": 0}
 – 
Tanvir Ahmed
26 Ноя 2019 в 15:39
Он говорит, что json_decode () ожидает, что параметр 1 будет строкой, заданным объектом
 – 
Tanvir Ahmed
27 Ноя 2019 в 13:05
Можете ли вы попробовать var_dump($salary->attendance_log) в контроллере. Это возвращаемая строка или объект?
 – 
Amit Senjaliya
27 Ноя 2019 в 17:05