php 未定义变量$no_antrian

pqwbnv8z  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(138)

我想在Laravel中创建一个排队系统,但我有编码问题,不知道如何正确设置编码。有人能帮帮我吗?

public function store(Request $request ){

        $latestAntrian = Antrian::where('layanan', $this->layanan)
            ->where('tanggal_antrian', now()->toDateString())
            ->latest('id_antrian')
            ->first();

         if (!$latestAntrian) {
            if($this->layanan === 'anak'){
                $this->no_antrian = 'A1';
            } elseif ($this->layanan === 'ibu'){
                $this->no_antrian = 'B1';
            } elseif ($this->layanan === 'lansia'){
                $this->no_antrian = 'C1';
            }
            $this->tanggal_antrian = now()->toDateString();
        } else {

            $kode_awal = substr($latestAntrian->no_antrian, 0, 1);
            $angka = (int) substr($latestAntrian->no_antrian, 1);
            $angka +=1;
            $no_antrian = $kode_awal . $angka;
            $tanggal_antrian = $latestAntrian->tanggal_antrian;
        }

        $data                   = new Antrian;
        $data->no_antrian       = ($no_antrian);
        $data->nama             = $request->get('nama');
        $data->no_hp            = $request->get('no_hp');
        $data->layanan          = $request->get('layanan');
        $data->tanggal_antrian  = ($tanggal_antrian);
        $data->save();
   
         Alert::success('Data Berhasil Ditambah');
 
         return redirect()->route('antrianuser')->with([
             'success' => 'Data Berhasil Di Tambah'
         ]);
    }

帮助我改进这段代码

pgky5nke

pgky5nke1#

TL:TR;您将面对Undefined variable $no_antrian,因为该变量仅在条件的else分支中赋值。
当前代码的一些问题:

  1. $tanggal_antrian$queue_date)变量仅在else分支中赋值,在其他分支中赋值$this->$tanggal_antrian,这就是为什么在$data->tanggal_antrian = ($tanggal_antrian);行中遇到undefined variable错误。我假设您打算在这两种情况下都分配局部变量。
    1.不知道你想通过在$data->tanggal_antrian = ($tanggal_antrian);行中添加括号来实现什么。不管是什么原因,这些括号在这里是毫无意义的。
    1.没有错误处理,这是一个坏主意->如果保存操作失败会发生什么?
    1.最后,代码不是DRY(不要重复自己);存在可以重构的重复块。
    我还建议你改进你的编码风格:
    1.您可以混合使用命名约定(snake_case vs camelCase)。坚持一个。
    1.我建议你不要使用非英语来命名你的变量/方法,因为这样,再加上没有PHPDoc块的事实,代码很难理解。
    所以我会整理代码,大致如下(我用翻译替换了所有非英语名称,除了Antrian模型类,你也应该重命名为Queue左右):
public function store(Request $request)
{
    // Get the latest queue entry based on the service and current date
    $latest_queue = Antrian::where('service', $request->service)
                          ->where('queue_date', now()->toDateString())
                          ->latest('queue_id')
                          ->first();

    $queue_number = '';
    $queue_date = now()->toDateString();

    // Generate new queue number based on the latest entry and type of service
    if (!$latest_queue) {
        $prefixes = ['child'   => 'A',
                     'mother'  => 'B',
                     'elderly' => 'C'];
        $queue_number = isset($prefixes[$request->service])
            ? $prefixes[$request->service] . '1'
            : 'Z1';
    } else {
        $initial_code = substr($latest_queue->queue_number, 0, 1);
        $number = (int)substr($latest_queue->queue_number, 1);
        $number++;
        $queue_number = "{$initial_code}{$number}";
    }

    // Create and save new Queue entry
    $data = new Antrian([
        'queue_number'  => $queue_number,
        'name'          => $request->name,
        'mobile_number' => $request->mobile_number,
        'service'       => $request->service,
        'queue_date'    => $queue_date,
    ]);

    $redirect_data = $data->save()
        ? ['success' => 'Data Successfully Added']
        : ['error' => 'Data Failed to Add'];
    return redirect()->route('queueUser')->with($redirect_data);
}

不知道你用什么PHP版本,但如果8,我会取代

$queue_number = isset($prefixes[$request->service])
    ? $prefixes[$request->service] . '1'
    : 'Z1';

shoter形式:

$queue_number = ($prefixes[$request->service] ?? 'Z') . '1';
ux6nzvsh

ux6nzvsh2#

你在类属性和变量的else块中定义了$this->no_antrian。指定时:

$data->no_antrian = ($no_antrian);

你只使用变量,所以它可能是未定义的。
尝试在else块中更改:

$no_antrian = $kode_awal . $angka;

签署人:

$this->no_antrian = $kode_awal . $angka;

以及:

$data->no_antrian       = ($no_antrian);

签署人:

$data->no_antrian       = $this->no_antrian;

相关问题