Doctrine ile Symfony 2 kullanıyorum ve çok sayıda derneğe katılan iki varlığım var. Diyelim ki iki varlığım var: Kullanıcı ve Grup ve db'deki ilgili tablolar kullanıcı, grup ve kullanıcı_ grubu.DQL çok fazla ve sayısız
DQL'de en çok bulunan en popüler 10 grup almak istiyorum, ancak birleşim tablosunda (users_groups) sorgu yürütme sözdizimini bilmiyorum. Doktrin kılavuzuna çoktan baktım ama çözümü bulamadım, sanırım hala DQL hakkında öğrenecek çok şeyim var. Düz sql olarak
olacağını:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
Beni bu DQL çevirmek yardım eder misiniz?
Güncelleme (sınıflar):
$dql = "SELECT g.id, count(u.id) as cnt FROM Entity\Group g " .
"JOIN g.users u GROUP BY g.id ORDER BY cnt DESC LIMIT 10;";
$query = $em->createQuery($dql);
$popularGroups = $query->getArrayResult();
GÜNCELLEME: Fiili sınıfları görmeden kolay değil
/**
* Entity\E_User
*
* @ORM\Table(name="users")
* @ORM\Entity
*/
class E_User
{
/**
* @ORM\ManyToMany(targetEntity="E_Group", cascade={"persist"})
* @ORM\JoinTable(name="users_groups",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="cascade")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="cascade")}
*)
*/
protected $groups;
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/* ... other attributes & getters and setters ...*/
}
/**
* Entity\E_Group
*
* @ORM\Table(name="groups")
* @ORM\Entity
*/
class E_Group
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @ORM\Column(name="text", type="string", length=255)
*/
private $name;
/* ... other attributes & getters and setters ...*/
}
teşekkürler, sorun, Grup öğesinin kullanıcı adı verilen bir ilişkilendirmesi olmamasıdır. Bu yüzden istisnayı alıyorum: [Semantical Error] satırı 0, 's GROUP BY g.id' yakınındaki col 72: Hata: Class Entity \ E_Group adlı kullanıcının adlı bir ilişkilendirmesi yok. Soruyu asıl derslerle güncelledim. İki yönlü çoktan ilişki kurmak için E_Group öğesine $ users özniteliği ekleyeyim mi? –
çok teşekkürler. Her neyse, iki yönlü bir ilişkiye girdim. Bu nasıl çalıştığını anlamak için sadece kukla bir soruydu. Tekrar teşekkürler –