Я новичок в Доктрине, и я пытаюсь свести воедино и Доктрину, и Симфонию одновременно, поэтому, пожалуйста, потерпите меня.
У меня есть объект "Предложение". Пользователи могут «оценивать» (оценивать из пяти) предложения. Я моделирую это с довольно очевидным дизайном, где у меня есть таблица предложений, таблица пользователей и таблица рейтинга. Каждая строка в таблице рейтинга представляет рейтинг одного пользователя в одном предложении.
Rating:
...
columns:
rating: { type: integer } # This is my score out of five
sentence_id: { type: integer }
user_id: { type: integer }
relations:
sfGuardUser: { local: user_id }
Sentence: { local: sentence_id, onDelete: CASCADE, foreignAlias: Ratings }
Это работает нормально, но я изо всех сил пытаюсь найти самый чистый способ задавать вопросы моей модели.
Например, в моем коде у меня есть вошедший в систему пользователь, связанный с моей сессией, и я показываю страницу, представляющую предложение, которое также уже находится в переменной. Я хочу отобразить зарегистрированный пользовательский рейтинг этого предложения.
В сыром SQL я хочу сделать следующее:
SELECT
rating
FROM
rating_table
WHERE
sentence_id = {$sentence->id} AND user_id = {$user->id}
Теперь я знаю, что мог бы просто сделать это с помощью RatingTable, просто написав новый запрос с небольшим количеством DQL или даже используя один из «волшебных» искателей. Но это кажется немного неуклюжим и не очень оригинальным, когда у меня уже есть объект Sentence в памяти с методом getRatings (), сгенерированным для меня Doctrine, который уже должен иметь оценку, которую я хочу в своей коллекции «всех оценок для этого предложения» .
Есть ли простой, эффективный способ, которым я упускаю что-то вроде $sentence->getRatings()->findByUserId($user->getId())
?
Или действительно разумно просто игнорировать тот факт, что у меня уже есть коллекция "оценок для этого предложения" в памяти, и вернуться к базе данных, полностью игнорируя их?