i am new to the easyadmin bundle and i am looking if it is possible to add childs directly from the parent object
So i got 3 objects :
- Recipe
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Recipe
*
* @ORMTable(name="recipe")
* @ORMEntity(repositoryClass="AppBundleRepositoryRecipeRepository")
*/
class Recipe
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="name", type="string", length=100, nullable=true)
*/
private $name;
/**
* @var DateTime
*
* @ORMColumn(name="createdon", type="datetime", nullable=true)
*/
private $createdon;
/**
* @var string
*
* @ORMColumn(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var string
*
* @ORMColumn(name="version", type="string", length=5, nullable=true)
*/
private $version;
/**
* @ORMOneToMany(targetEntity="Recipe_Product", mappedBy="recipe")
*/
private $recipeproducts;
...
-Recipe_Product (which has quantity and unit as attributes to enter)
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Recipe_Product
*
* @ORMTable(name="recipe__product")
* @ORMEntity(repositoryClass="AppBundleRepositoryRecipe_ProductRepository")
*/
class Recipe_Product
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="quantity", type="decimal", precision=10, scale=2, nullable=true)
*/
private $quantity;
/**
* @ORMManyToOne(targetEntity="Recipe", inversedBy="recipeproducts")
* @ORMJoinColumns({
* @ORMJoinColumn(name="recipeid", referencedColumnName="id")
* })
*/
private $recipe;
/**
* @ORMManyToOne(targetEntity="Product", inversedBy="recipeproducts")
* @ORMJoinColumns({
* @ORMJoinColumn(name="Productid", referencedColumnName="id")
* })
*/
private $product;
/**
* @ORMManyToOne(targetEntity="Unit", inversedBy="recipeproducts")
* @ORMJoinColumns({
* @ORMJoinColumn(name="Unitid", referencedColumnName="id")
* })
*/
private $unit;
...
and of course a
- Product.
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Product
*
* @ORMTable(name="product")
* @ORMEntity(repositoryClass="AppBundleRepositoryProductRepository")
*/
class Product
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORMColumn(name="ref", type="string", length=25)
*/
private $ref;
/**
* @var string
*
* @ORMColumn(name="ref4stat", type="string", length=25)
*/
private $ref4Stat;
/**
* @var int
*
* @ORMColumn(name="size", type="integer")
*/
private $size;
/**
* @ORMManyToOne(targetEntity="Unit", inversedBy="products")
* @ORMJoinColumns({
* @ORMJoinColumn(name="unitid", referencedColumnName="id")
* })
*/
private $unit;
/**
* @ORMManyToOne(targetEntity="ProductType", inversedBy="products")
* @ORMJoinColumns({
* @ORMJoinColumn(name="producttypeid", referencedColumnName="id")
* })
*/
private $producttype;
/**
* @ORMOneToMany(targetEntity="Recipe_Product", mappedBy="product")
*/
private $recipeproducts;
...
When editing a Recipe, i would like to be able to add directly a new recipe_product line but i haven t found a way to do that...
Anyone has an idea ?
Added on 14/10:
I found a way to render the form...
in my easyadmin config file, i created the following entry:
Recipe:
class: AppBundleEntityRecipe
form:
fields:
- name
- beer
- version
- description
- createdon
- { property: 'recipeproducts', label: 'Ingredients', type: 'collection', type_options: {entry_type: 'AppBundleFormRecipe_ProductType', by_reference: false} }
with the Form Code as
<?php
namespace AppBundleForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentFormExtensionCoreTypeHiddenType;
class Recipe_ProductType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('product')
->add('quantity')
->add('unit')
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundleEntityRecipe_Product'
));
}
}
which renders the form (that don t create the link between the 2 entities but that must be in the Admin controller i guess)
See Question&Answers more detail:
os