1. Go to this page and download the library: Download weavora/doctrine-extensions library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
weavora / doctrine-extensions example snippets
namespace Acme\BlogBundle\Entity;
use Weavora\Doctrine\ORM as ORM;
/**
* Custom query class for Post entity
* Contains useful criteria set for posts filtering
*/
class PostQueryBuilder extends ORM\EntityQueryBuilder
{
public function published()
{
return $this->filterByColumn('Post.publishStatus', Post::STATUS_PUBLISHED);
}
public function recentFirst()
{
return $this->orderBy('Post.publishedAt', 'DESC');
}
}
/**
* Post entity repository
* Contains methods for fetch posts
*/
class PostRepository extends ORM\EntityRepository
{
/**
* Instantiate custom query builder
* @return PostQueryBuilder
*/
public function filter()
{
return new PostQueryBuilder($this->getEntityManager(), $this);
}
/**
* Find 10 recent posts
*
* @return Post[]
*/
public function findRecent()
{
return $this
->filter() // use PostQueryBuilder
->published() // get only published posts
->limit(10) // get only first 10 posts
->recentFirst() // most recent posts should go first
->fetchAll(); // get posts
}
/**
* Find posts by category
*
* @param Category $category
* @param int $page
* @param int $itemsPerPage
* @return Post[]
*/
public function findByCategory(Category $category, $page = 1, $itemsPerPage = 10)
{
return $this
->filter() // use PostQueryBuilder
->filterByColumn('Post.category', $category) // get only posts in the specified category
->paginate($page, $itemsPerPage) // get only the specified page
->recentFirst() // most recent posts should go first
->fetchAll(); // get posts
}
/**
* Count posts by author
*
* @param Author $author
* @return int
*/
public function countByAuthor(Author $author)
{
return $this
->filter() // use PostQueryBuilder
->select('COUNT(Post.id)') // calculate count
->filterByColumn('Post.author', $author) // calculate only author's posts
->groupBy('Post.author') // group by author
->fetchScalar(); // get scalar results (the first column of the first row)
}
}
// entity class name -> alias
// \Entity\Post -> Post
// \Acme\DemoBundle\Entity\AuthorSettings -> AuthorSettings
// \Comment -> Comment
$alias = $queryBuilder->getEntityAlias();
// SELECT * FROM Entity\Post Post WHERE Post.title = :p1, [p1 = 'Post 1']
$queryBuilder->filterByColumn('Post.title', 'Post 1');
// SELECT * FROM Entity\Post Post WHERE Post.category IN (1,2,3)
$queryBuilder->filterByColumn('Post.category', array(1,2,3));
// SELECT * FROM Entity\Post Post WHERE Post.author IS NULL
$queryBuilder->filterByColumn('Post.author', null);
// SELECT * FROM Entity\Post Post
$queryBuilder->filterByColumn('Post.author', null, false);
// SELECT * FROM Entity\Post Post WHERE Post.author = 1
$queryBuilder->filterByColumn('Post.author', 1, false);
// SELECT * FROM Entity\Post Post WHERE Post.title = :title, [title = 'Post 1']
$queryBuilder->filterByStatement('Post.title = :title', ['title' => 'Post 1']);
// SELECT * FROM Entity\Post Post WHERE Post.category IN (1,2,3)
$queryBuilder->filterByColumn('Post.category IN (1,2,3)');
// SELECT * FROM Entity\Post Post LIMIT 0, 10
$queryBuilder->limit(10);
// SELECT * FROM Entity\Post Post LIMIT 15, 10
$queryBuilder->limit(10, 15);
// SELECT * FROM Entity\Post Post -> Post[]
$queryBuilder->fetchAll();
// SELECT * FROM Entity\Post Post LIMIT 0, 10 -> Post[]
$queryBuilder->filterByStatement('Post.title = :title')->fetchAll(['title' => 'Post 1']);
// SELECT * FROM Entity\Post Post LIMIT 0, 1 -> Post
$queryBuilder->fetchOne();
// SELECT COUNT(*) FROM Entity\Post Post LIMIT 0, 1 -> int
$queryBuilder->select('COUNT(*)')->fetchScalar();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.