Я уже несколько часов борюсь с этим в течение нескольких часов и прочитал Doctrine documentation и более documentation, но я все еще борется.Доктрина 2 - сохраняющиеся сущности в отношениях «один-к-одному»
У меня есть две таблицы. Моя таблица «lookups» является владельцем (многими) во взаимосвязи с таблицей «lookup_statuses» (одна). Существует несколько разных статусов, которые могут быть найдены в определенном порядке.
Это (я думаю) однонаправленное отношение «один ко многим».
В коде я ищу таблицу lookup_statuses и возвращаю объект, который соответствует требуемому slug. Я вызываю setLookupStatus на свой объект lookup и пытаюсь его сохранить. Я получаю сообщение об ошибке 'Новый объект был найден через связь'.
Я использовал доктрину обратной инженерии, чтобы начать мою модель домена, но я просто не могу понять, как правильно реализовать эту взаимосвязь.
Мой LookupStatuses класс (один) выглядит следующим образом:
namespace App\Lib\Domain\Datalayer;
/**
* LookupStatuses
*
* @ORM\Table(name="lookup_statuses")
* @ORM\Entity
*/
class LookupStatuses
{
/**
* @OneToMany(targetEntity="App\Lib\Domain\Datalayer\Lookups", mappedBy="lookupStatus", cascade={"persist", "remove"})
*/
private $lookups;
}
И мой стол Lookups (много) выглядит следующим образом:
namespace App\Lib\Domain\Datalayer;
/**
* Lookups
*
* @ORM\Table(name="lookups", indexes={@ORM\Index(name="IDX_4CEC819D037A087", columns={"lookup_status_id"}), @ORM\Index(name="IDX_4CEC8194D39DE23", columns={"camera_event_id"})})
* @ORM\Entity
*/
class Lookups
{
/**
* @var \App\Lib\Domain\Datalayer\LookupStatuses
*
* @ORM\ManyToOne(targetEntity="App\Lib\Domain\Datalayer\LookupStatuses", inversedBy="lookups", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="lookup_status_id", referencedColumnName="id")
* })
*/
private $lookupStatus;
}
Вот версии стека я использую :
"php": ">=5.4.0",
"laravel/framework": "5.0.*@dev",
"doctrine/orm": ">=2.4.0",
Пожалуйста, помогите мне разобраться с этим, чтобы мой прецедент работал. Я хочу:
- Посмотрите статус в коде lookup_statuses
- Вызов setLookupStatus() в моем поиске объекте с объектом я получаю
- Упорство в поиске, чтобы сохранить новый код состояния
---- обновление: включая код ----
Это пример кода:
$lookupStatusesService = ServiceFactory::getInstance('LookupStatuses');
$status = $lookupStatusesService->findOne(['slug' => $slug], true);
$cameraEventService = ServiceFactory::getInstance('CameraEvents');
$cameraEvent = $cameraEventService->findOne(['uuid' => $uuid], true);
$unicodeLookupService = ServiceFactory::getInstance('UnicodeLookups');
$unicodeLookup = $unicodeLookupService->findOne(['cameraEvent' =>
$cameraEvent->getId()], true);
$unicodeLookup->setLookupStatus($status);
EntityManager::persist($unicodeLookup);
EntityManager::flush();
Findone() создает QueryBuilder ИНЕК и возвращает
$queryBuilder->getQuery()->getResult();
Можете ли вы опубликовать код, используемый в настоящее время? – SamV