[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Doctrine, многие ко многим findBy, paginator. Как?
inpost
Всем привет. В Doctrine есть удобный интерфейс find, findby для выборки записей.

Допустим стандартный запрос:
$books = $entityManager->getRepository('Book')->findBy([],null,2,1); // Все записи
foreach($books as $book) {
echo $book->id."\r\n";
foreach($book->authorRead as $author) {
echo '--'.$author->name."\r\n";
}
echo "\r\n";
}

Где таблица Book связана с таблицей Authors по полю "authorRead".

В спойлере спрячу структуру Book и Author, чтобы на всякий случае было бы понятнее.
Свернутый текст
/** @Entity */
class Book
{
/** @Id @GeneratedValue @Column(type="integer") */
public $id;

/**
* Unidirectional - Many users have marked many comments as read
*
*
@ManyToMany(targetEntity="Author",inversedBy="bookAuthor",cascade={"persist", "remove"})
*
@JoinTable(name="book2author")
*/

public $authorRead;

/** @Column(type="datetime", name="date",options={"default": 0}) */
public $date;

/** @Column(type="string", name="name") */
public $name = ''; // По умолчанию пусто


public function __construct()
{
$this->date = new DateTime('now');
$this->id = new \Doctrine\Common\Collections\ArrayCollection;
$this->authorRead = new \Doctrine\Common\Collections\ArrayCollection;
}

}


/** @Entity */
class Author
{
/** @Id @GeneratedValue @Column(type="integer") */
public $id;

/** @Column(type="string", name="name") */
public $name;

/**
* Bidirectional - Many comments are favorited by many users (INVERSE SIDE)
*
*
@ManyToMany(targetEntity="Book", mappedBy="authorRead")
*/

public $bookAuthor;

public function __construct()
{
$this->id = new \Doctrine\Common\Collections\ArrayCollection;
$this->name = 'default value';
}
}


Так вот, как выбрать через LIMIT понятно для findBy. Но чтобы писать LIMIT надо уже знать количество записей. Как работать через queryBuilder я видел в мануале, но там надо писать собственный запрос с JOIN таблица связей + JOIN таблица авторов, а не пользоваться готовым запросом из findBy.
А вот как получить количество записей в данном случае? Гуглю Paginator и нет ответа, гуглю SQL_CALC_FOUND_ROWS в связке с findBy, и тоже не вижу толкового ответа.



_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.