2013-04-23 5 views
2

я имею простую функциюучения выберите объект не извлекая все столбцы

function getitembyid($id) 
{ 
    $item = $em->find('models\Item', $id); 
    return $item; 
} 

я использую эту функцию много в моем приложении, я также использую его, например:

$item = getitembyid($id); 
$item->setName($name); 
$em->flush(); 

проблема сейчас пришел к выводу, что один столбец в таблице элементов содержит большое количество текстовых данных, что иногда делает этот запрос слишком медленным. (проверено в обычном sql, выбирая без этого 1 столбец быстро, еще медленнее)

есть способ изменить мою простую функцию, чтобы избежать выбора этого столбца и не разрушать функциональность моего приложения (обновление строк должно работать не касаясь этой большой колонны)

ответ

2

Это подход частичного объекта. Попробуйте:

$item = $em->createQuery("select partial i.{id,name} from models\Item i") 
      ->getResult(); 

Подробнее о частичных объектах: http://docs.doctrine-project.org/en/latest/reference/partial-objects.html

+0

Я попытался это и у меня есть 2 проблемы: первый: я не могу выбрать отношение к другому объекту и второй, он твердит: Фатальная ошибка: неперехваченное исключение «Doctrine \ ORM \ NonUniqueResultException», я, конечно, добавил «из моделей \ Item i, где id =». $ Id – mire

+0

editted. Вам нужно будет var_dump $ item и отладить некоторые, если это не решит проблему. Вам также может потребоваться использовать getSingleResult(). – Lighthart

+0

это похоже работает., Спасибо – mire

Смежные вопросы