Symfony Database Cookbook: Difference between revisions

From Littledamien Wiki
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="3,9-12,16">
<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]

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]

Notes[edit]

  1. Relationships/Accosciations, Doctrine documentation, Symfony documentation, "The Book"
  2. Some Doctrine 2 Best Practices, UVD
    #4 By default Doctrine will fetch all of the properties for a given entity