Symfony Database Cookbook: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
| (3 intermediate revisions by the same user not shown) | |||
| Line 13: | Line 13: | ||
First create a property within the category/group/type class that will hold the records linked to it.<ref>[http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associationsEntity Relationships/Accosciations], Doctrine documentation, Symfony documentation, "The Book"</ref> | First create a property within the category/group/type class that will hold the records linked to it.<ref>[http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associationsEntity Relationships/Accosciations], Doctrine documentation, Symfony documentation, "The Book"</ref> | ||
<syntaxhighlight lang="php" highlight=" | <syntaxhighlight lang="php" highlight="4,10-12,17"> | ||
// src/AppBundle/Entity/Category.php | // src/AppBundle/Entity/Category.php | ||
| Line 62: | Line 62: | ||
* [http://tutorials.dbarchowsky.com Tutorials database]: `Tutorial` and `TutorialGroup` classes. | * [http://tutorials.dbarchowsky.com Tutorials database]: `Tutorial` and `TutorialGroup` classes. | ||
== Selectively retrieving object properties == | |||
By default Doctrine retrieves all the properties for an object.<ref>[http://www.uvd.co.uk/blog/some-doctrine-2-best-practices/ Some Doctrine 2 Best Practices], UVD<br />#4 By default Doctrine will fetch all of the properties for a given entity</ref> | |||
<syntaxhighlight lang="php"> | |||
$qb = $em->createQueryBuilder(); | |||
// You can select multiple properties in the partial statement | |||
$qb | |||
->select('partial Article.{id,title,summary}') | |||
->from('Entity\Article') | |||
; | |||
</syntaxhighlight> | |||
== Controlling the order of associated entities == | |||
With a one-to-many relationship, display the groups, with the associated entities under each group. | |||
In the group entity add an OrderBy annotation to the associated property: | |||
<syntaxhighlight lang="php" highlight="4"> | |||
/** | |||
* @var Array List of tutorials in this group. | |||
* @ORM\OneToMany(targetEntity="Tutorial", mappedBy="group") | |||
* @ORM\OrderBy({"slot" = "ASC", "date" = "DESC"}) | |||
*/ | |||
public $tutorials; | |||
</syntaxhighlight> | |||
== See also == | |||
* [[DQL User-Defined Functions]] (wiki) | |||
* [http://labs.octivi.com/mastering-symfony2-performance-doctrine/ Mastering Symfony2 Performance] (Octivi.com) | |||
== Notes == | == Notes == | ||
<references/> | <references/> | ||
Latest revision as of 10:23, 11 March 2015
Creating classes with Doctrine[edit]
A command line shortcut for the process of creating an entity class described in Generating Database Tables and/or Schema:
$ php app/console doctrine:generate:entity --entity="AppBundle:Category" --fields="name:string(100)"
Specifying foreign keys between tables[edit]
First create a property within the category/group/type class that will hold the records linked to it.[1]
// src/AppBundle/Entity/Category.php
// ...
use Doctrine\Common\Collections\ArrayCollection;
class Category
{
// ...
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
}
Then add a property in the other class to reference the category/group/type class:
// src/AppBundle/Entity/Product.php
// ...
class Product
{
// ...
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
}
Have Doctrine generate getter and setter methods:
$ php app/console doctrine:generate:entities Acme
Examples[edit]
- Tutorials database:
TutorialandTutorialGroupclasses.
Selectively retrieving object properties[edit]
By default Doctrine retrieves all the properties for an object.[2]
$qb = $em->createQueryBuilder();
// You can select multiple properties in the partial statement
$qb
->select('partial Article.{id,title,summary}')
->from('Entity\Article')
;
Controlling the order of associated entities[edit]
With a one-to-many relationship, display the groups, with the associated entities under each group.
In the group entity add an OrderBy annotation to the associated property:
/**
* @var Array List of tutorials in this group.
* @ORM\OneToMany(targetEntity="Tutorial", mappedBy="group")
* @ORM\OrderBy({"slot" = "ASC", "date" = "DESC"})
*/
public $tutorials;
See also[edit]
- DQL User-Defined Functions (wiki)
- Mastering Symfony2 Performance (Octivi.com)
Notes[edit]
- ↑ Relationships/Accosciations, Doctrine documentation, Symfony documentation, "The Book"
- ↑ Some Doctrine 2 Best Practices, UVD
#4 By default Doctrine will fetch all of the properties for a given entity