Как установить последнее присвоенное значение, когда оно находится в промежуточной таблице

У меня есть форма с этим полем:

class OrdersType extends AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options)
{
// Others form fields

if ($options['curr_action'] !== NULL)
{
$builder
->add('status', 'entity', array(
'class' => 'CommonBundle:OrderStatus',
'property' => 'name',
'required' => TRUE,
'label' => FALSE,
'mapped' => FALSE
));
}
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'register_type'
));

$resolver->setOptional(array(
'curr_action'
));

$resolver->setDefaults(array(
'data_class' => 'Tanane\FrontendBundle\Entity\Orders',
'render_fieldset' => FALSE,
'show_legend' => FALSE,
'intention' => 'orders_form'
));
}

public function getName()
{
return 'orders';
}

}

И иметь эту сущность:

class OrderHasStatus {
use IdentifiedAutogeneratedEntityTrait;

/**
* Hook timestampable behavior
* updates createdAt, updatedAt fields
*/
use TimestampableEntity;

/**
* @ORM\ManyToOne(targetEntity="\Tanane\FrontendBundle\Entity\Orders")
* @ORM\JoinColumn(name="general_orders_id", referencedColumnName="id")
*/
protected $order;

/**
* @ORM\ManyToOne(targetEntity="\Tanane\CommonBundle\Entity\OrderStatus")
* @ORM\JoinColumn(name="status_id", referencedColumnName="id")
*/
protected $status;

public function setOrder(\Tanane\FrontendBundle\Entity\Orders $order)
{
$this->order = $order;
}

public function getOrder()
{
return $this->order;
}

public function setStatus(\Tanane\CommonBundle\Entity\OrderStatus $status)
{
$this->status = $status;
}

public function getStatus()
{
return $this->status;
}

}

Где я храню последний статус, присвоенный заказу. Мне нужно установить этот статус в форме, когда я редактирую или показываю заказ, но не знаю, как этого добиться, кто-нибудь может мне помочь?

0

Решение

Итак, это выглядит связано с Ваш другой вопрос, касающийся отношений n: m. Ваше существующее решение может работать, если у вас было отношение «многие ко многим», но не с тремя сущностями.

Я думаю, что решение похоже:

OrdersType

$builder->add('orderHasStatus', 'collection', array(
'type' => new OrderHasStatusType(),
'allow_add' => true,
'allow_delete' => true
));

OrderHasStatusType

$builder->add('status', 'collection', array(
'type' => new StatusType(),
'allow_add' => true,
'allow_delete' => true
));

StatusType

$builder->add('status', 'entity', array(
'class' => 'CommonBundle:Status'
));

Поскольку ваша схема стоит ^, ваш OrdersType должен содержать коллекцию типов OrderHasStatus, которые сами имеют StatusTypes, содержащие сами статусы.

^ Одна вещь, которую я хотел бы спросить, и, возможно, должен был бы иметь в моем другом ответе, является ли ваша схема правильной — вам нужен каждый Орден, чтобы иметь несколько Статусов? Если нет, то то, что вам действительно нужно, это «многие к одному» между порядком и статусом, который удалил бы промежуточный слой OrderHasStatus. Если вам нужны дополнительные данные о OrderHasStatus (отметка времени?), Вы можете поместить эту информацию в таблицу Order. Но если вам нужно несколько статусов или вы хотите хранить дополнительные данные отдельно от таблицы Orders (в этом случае Orders и OrderHasStatus на самом деле один-к-одному), это хорошо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]