0

私は Symfony2 を使用しています。

OneToMany アソシエーションによって関連付けられたエンティティ Employee とエンティティ Message があります。

したがって、従業員はいくつかのメッセージを持つことができ、特定の従業員に対して最近送信されたメッセージを取得したいと考えています。

このクエリは正しいですか?

<?php
  public function getLast($id_employee)
  {
   $query = $this->_em->createQuery(
                 'SELECT MAX(m.sentAt) FROM MyBundle:Message m JOIN m.employee e 
                   WHERE e.id = ' . $id_employee);
    return $query->getSingleResult();
   }    

どうもありがとう

4

1 に答える 1

1

JOIN外部キーはすでにmessageテーブルにあり、メッセージは 1 人のユーザーにのみ属し、1 人のユーザーはそのユーザーに関連する複数のメッセージを持つことができると考えられるためを実行する必要はありません。

したがって、クエリは次のようになります

'SELECT MAX(m.sentAt), m.text 
 FROM MyBundle:Message m 
 WHERE m.employee_id = :id_employee'

そのようにコードを変更する必要があります

$query = $this->_em->createQuery(
              'SELECT MAX(m.sentAt),m.text 
               FROM MyBundle:Message m 
               WHERE m.employee_id = :id_employee')
               ->setParameter('id_employee',$employee_id)
               return $query->getSingleResult();

ただし、参加する必要がある場合は、この重要なことを覚えておいてください

  1. エンティティが関連付けに関連付けられており、唯一のON条件がキーに関するものである場合は、WHERE句で指定する必要はありません
  2. DQLDoctrine は、直接使用せずに(または少しだけ使用して)このタイプのクエリを実行し->leftJoin(..)、などを使用する->where(..)ための「より高速な」方法を提供します。
于 2012-07-05T13:56:24.360 に答える