Вы должны начать с объявления отношений в ваших сущностях. Я предполагаю, что в вашей подкатегории может быть много продуктов (один ко многим):
Я не проверял этот код, очевидно, поэтому я прошу прощения, если есть какие-то ошибки, это в основном не в моей голове.
/**
* Subcategory
* @Entity
* @Table(name="subcategories")
*
*/
class Subcategory {
/**
* @OneToMany(targetEntity="Project\Entities\Product", mappedBy="id_subcat")
* @var Products[]
*/
protected $products;
public function __construct()
{
$this->products = new \Doctrine\Common\Collections\ArrayCollection();
}
// Leaving out rest of class for simplicity...
}
/**
*
* Product
* @Entity
* @Table(name="products")
*/
class Product {
// Rest of class....
/**
* @ManyToOne(targetEntity="Project\Entities\Subcategory", inversedBy="products")
* @JoinColumn(name="id_subcat", referencedColumnName="id")
*/
protected $id_subcat = null;
}
** Затем запросить в SF2 это было бы так:
/* var \Doctrine\ORM\EntityManager $em */
$dql = "SELECT p FROM Project\Entities\Product p JOIN p.subcategoryId sc ORDER BY p.name ASC"
$query = $em->createQuery($dql);
$results = $query->getResult();
$products = array();
Теперь, поскольку у нас есть защищенные переменные в нашей сущности, вам нужны сеттеры и геттеры для ваших объектов.
Это может быть очень полезно для форматирования возврата содержимого и т. Д.
foreach ($results as $product)
{
$products[] = array("id" => $product->getId(),
"name" => $product->getName(),
"subCategory" => $product->getSubcategoryId()
);
}