• 18-05-2021, 00:43:09
    #1
    Merhaba,

    PHP'de acemiyim. Basit bir ticket sistemi yazdım. Bilgisini gönderdiğim kullanıcıya ait olan destek taleplerini ve bu destek taleplerinin içerisinde ki mesajları tek seferde çekmek istiyorum. Döngüsüz olarak alabiliyorum fakat döngüyü kullandığımda uygun JSON formatına göre yapamadım. Son çare size danışmak istedim.

    $user_id = tickets tablosunda bir sütundur. O destek talebinin hangi kullanıcıya ait olduğunu belirtir. O sebeple kullandım.
    $row["id"] kısmı ise tickets tablosunda ki id'dir. Comments içerisinde de hangi destek talebine yorum atıldığını belirlemek ticket_id ile kontrol ediyorum.

    Örnek Kod:

        $ticket = new Ticket();
        //    First Query
        $firstQuery = "SELECT * FROM tickets WHERE user_id = " . $user_id;
        $tickets = mysqli_query($baglan, $firstQuery) or die(mysqli_error($baglan));
        $row = mysqli_fetch_assoc($tickets);
        $ticket->setId($row["id"]);
        $ticket->setUserId($row["user_id"]);
        $ticket->setUserMail($row["user_mail"]);
        $ticket->setTitle($row["title"]);
        $ticket->setMessage($row["message"]);
        $ticket->setStatus($row["status"]);
        $ticket->setCreated($row["created"]);
        //    Second Query
        $secondQuery = "SELECT * FROM tickets_comments WHERE ticket_id = " . $row["id"];
        $comments = mysqli_query($baglan, $secondQuery) or die(mysqli_error($baglan));
        $ticket->setComments($comments->fetch_all(MYSQLI_ASSOC));
        echo json_encode($ticket->expose());
    Örnek Çıktı:
  • 18-05-2021, 09:23:50
    #2
    Merhaba öncelikle çalışan kodu atmışsınız döngüyü nasıl kullandınız ve ne hata aldınız o kodları atarsanız yardımcı olalım şuan burda bir sıkıntı görünmüyor
    Birde ticket classından setcomment bölümünü atarsanız döngü için ondada değişiklik yapmak gerekebilir
  • 18-05-2021, 10:09:41
    #3
    $comments = mysqli_query($baglan, $secondQuery) or die(mysqli_error($baglan));
    $ticket->setComments($comments->fetch_all(MYSQLI_ASSOC));

    yerine

    $comments = mysqli_query($baglan, $secondQuery) or die(mysqli_error($baglan));
    $duzenlenmisYorumlar = array();
    foreach($comments->fetch_all(MYSQLI_ASSOC) as $key=>$value)
    {
    $duzenlenmisYorumlar[] = $value;
    }

    $ticket->setComments($duzenlenmisYorumlar);

    yada

    $comments = mysqli_query($baglan, $secondQuery) or die(mysqli_error($baglan));
    $duzenlenmisYorumlar = array();
    $yorumlar = $comments->fetch_all(MYSQLI_ASSOC);
    for($iterasyon=0; $iterasyon<=count($yorumlar);$iterasyon++)
    {
    $yorumlar[$iterasyon]['yeniAlanEkliyoruz'] = "Php ile yeni alan ekledik";
    $yorumlar[$iterasyon]['message'] = "Php ile message alanını manipüle ederek değerini değiştirdik. ";
    $yorumlar[$iterasyon]['message'] .= " bu alanın sonuna eklenecek mesajdır. "; // Daha açık yazımı => $yorumlar[$iterasyon]['message'] = $yorumlar[$iterasyon]['message'] . " bu alanın sonuna eklenecek mesajdır.
    $duzenlenmisYorumlar[$iterasyon] = $yorumlar;
    }

    $ticket->setComments($duzenlenmisYorumlar);

    Bu şekilde bir kullanım sağlayabilirsin.

    Saygılarımla
  • 18-05-2021, 16:19:02
    #4
    header('Content-type: application/json');
    $db = new mysqli('localhost', 'root', '', 'db_adi');
    $db->query('SET NAMES utf8');
    
    $data = $tickets = array();
    
    $query = $db->query('SELECT * FROM tickets WHERE user_id = ' . $user_id);
    while ($row = $query->fetch_object()) {
        $data[$id] = array(
            'id' => $row->id,
            'user_id' => $row->user_id,
            'user_mail' => $row->user_mail,
            'user_title' => $row->title,
            'message' => $row->message,
            'status' => $row->status,
            'created' => $row->created,
            'comments' => array()
        );
    
        array_push($tickets, $row->id);
    }
    
    $query = $db->query('SELECT * FROM ticket_comments WHERE ticket_id IN(' . join(', ', $tickets) . ')');
    while ($row = $query->fetch_object()) {
        $data[$row->ticket_id]['comments'][] = $row;
    }
    
    exit(json_encode($data, JSON_NUMERIC_CHECK));