Jak z sumować i wyświetlić odpowiednie dane

0

Mam stworzone trzy encje User one to many Property one to manyexpenses złączyłem je w repozytorium:

public function getQueryBuilder1($User ){
           $qb1 = $this->createQueryBuilder('u')
                   
                   ->select('u,o,p,ep,sum(ep.price')
                   ->LeftJoin('u.property','p')
                   ->LeftJoin('p.expenses','ep')
                   ->where('u.username = :user')                  
                   ->setParameter('user', $User)
                   ->getQuery()
                   ->getArrayResult();
                   
            return $qb1;       
    } 

kod w kontrolerze:

 public function indexAction()
    {
        $User=$this->getUser()->getUsername();
       
        $em = $this->getDoctrine()->getManager();

        $AllJoinTableRepo = $em->getRepository('UserUserBundle:User');

        
        $QueryBuilder1= $AllJoinTableRepo->getQueryBuilder1($User);
        
      
        return array(
            
            'QueryBuilder1' => $QueryBuilder1,

      

        );

kod w szblonie Twig:

{% for details in QueryBuilder %}     
                       
                           {% for detailsproperty in details.property%}
                    <tr>                         
                        
                        <th class="text-center">{{detailsproperty.name}}</th>
                        <th class="text-center">{{detailsproperty.adress}}</th>
                            {% for detailsexpenses in detailsproperty.expenses%}
                            
                            
                           
                              {% if loop.index >=2 %}      
                    </tr>
                    
                    <tr>
                                    <th class="text-center"></th>
                                    <th class="text-center"></th>
                                     
                                     
                                     
                                     
                                     
                                
                                
                               {% endif %}  
                             
                               
                         
                           <th class="text-center">{{detailsexpenses.name}}</th>
                           <th class="text-center">{{detailsexpenses.createDate|date('d-m-Y')}}</th>
                           <th class="text-center">{{detailsexpenses.price|number_format(2,',','')}}zł</th>
                           
                           
                          
                            {% endfor %}
                        {% endfor %}
                    </tr>

Tutaj obrazek ja to mniej więcej wyglada
<image><img src=http://naforum.zapodaj.net/thumbs/4a7f6405f99a.gif alt=hosting zdjęć zapodaj.net /></image>
Mama dwa problemy
1.Chce sumować wszystkie wydatki jednej nieruchomości
2 Jak to wyświetlić w szblonie by to prawidłowo wyglądało

W repozytorium użyłem funkcji sum tylko nie mam pomysłu jak uchwycić property id

0

Nie wiem czy to prawdziwy kod ? Brakowało nawiasu w SUM.

public function getQueryBuilder1($User ){
           $qb1 = $this->createQueryBuilder('u')
 
                   ->select('u,o,p,ep,sum(ep.price) totalPrice')
                   ->LeftJoin('u.property','p')
                   ->LeftJoin('p.expenses','ep')
                   ->where('u.username = :user')
->groupBy('u.id') //o ile nazwałeś id usera $id                  
                   ->setParameter('user', $User)
                   ->getQuery()
                   ->getArrayResult();
 
            return $qb1;       
    } 

To powinno ci utworzyć index w tablicy totalPrice z łączną kwotą.

// edit
mam nadzieję że nazewnictwo zmiennych i metod jest tylko tymczasowa ;)

0

Mam takie zapytanie

public function getQueryBuilder1( ){
           $qb1 = $this->createQueryBuilder('u')
 
                   ->select('u,o,p,ep,sum(ep.price) totalPrice')
   
                   ->LeftJoin('u.owner','o')
                   ->LeftJoin('o.property','p')
                   ->LeftJoin('p.expenses','ep')
//                   ->where('u.username = :user')
                 ->groupBy('u.username,o.name,p.name')
//                   ->setParameter('user', $User)
                   
                   ->getQuery()
                   ->getArrayResult();
 
            return $qb1;       
    }  

Tutaj jest kolekcja tabli:

[
                [
                "id" => 8,
                "username" => "macq",
                "owner" => [
                              [
                                "id" => 5,
                                "name" => "Hyna Bora",
                                "adress" => "ul.Baranio 17,34-567 Zadupie",
                                "property" => [
                                                  [
                                                    "id" => 6,
                                                    "name" => "Garaż",
                                                    "adress" => "ul.Baranio 17,34-567 Zadupie",
                                                     "expenses"=>[
                                                              [
                                                     "id" => 2,
                                                    "name" => "podatek",
                                                     "price"=>"97"
                                                   
                                                                ],
                        
                        
                                                    ],
 [
                                                    "id" => 7,
                                                    "name" => "lokal",
                                                    "adress" => "ul.Baranio 17,34-567 Zadupie",              
                                                    "expenses"=>[
                                                              [
                                                     "id" => 7,
                                                    "name" => "Czynsz",
                                                     "price"=>"567"
                                                   
                                                                ],
                                                               [ 
                                                      "id" => 9,
                                                    "name" => "Czynsz",
                                                     "price"=>"967"
                                                                      ]
                                                                  ]


                        
                        
                                                    ]
        
                                                ],
                                ],
                                [
                                "id" => 6,
                                "name" => "Kasia Doryghi",
                                "adress" => "ul.Hellera 18,94-537 Katowice",
                                "property" => [
                                                  [
                                                    "id" => 7,
                                                    "name" => "Mieszkanie",
                                                    "adress" => "ul.Hellera 18,94-537 Katowice",
                                                    
                                                  ]
                                                ]
                                ]
                            ]
                ]
            ];
         

Dlaczego zwraca ono mi tylko wydatki drugiego mieszkania. W bazie danych w sql zwraca mi wszystkie tu tylko ostatnią pozycją

0

Mój błąd, pogrupowałem po użytkowniku, zamiast po mieszkaniu.

Powinieneś grupować po p.id, to powinno wystarczyć.

->groupBy('p.id')

1 użytkowników online, w tym zalogowanych: 0, gości: 1