У меня есть две сущности, которые говорят ' Пользователь ' и ' Адрес ', в которых у меня есть отношение * OneToOne 'между ними.
Таблица пользователей имеет столбец ' address_id ', который равен Внешний ключ , хранит идентификатор Таблица адресов .Я пытался создать прибор, используя 2 различных метода:
Метод 1:
AddressFixture.php
namespace App\DataFixtures;
use App\Entity\Address;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class AddressFixture extends Fixture
{
public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}
public function load(ObjectManager $manager)
{
$address = new Address();
$address->setStreet('Sai Apartment');
$address->setCity('Noida');
$address->setState('Uttar Pradesh');
$address->setCountry('India');
$address->setPincode('201301');
$manager->persist($address);
$manager->flush();
if (null != $address->getId()) {
$user = new User();
$user->setFName('Kumar');
$user->setLName('Saurabh');
$user->setUsername('supa-admin');
$user->setPassword(
$this->encoder->encodePassword($user, 'querty')
);
$user->setEmail('some_email@gmail.com');
$user->setAddress($address);
$user->setContact(78954);
$user->setGender('male');
$user->setAge(26);
$user->persist($user);
$manager->flush();
}
}
}
Метод 2:
В этом я создал два разных прибора:
AddressFixture.php
namespace App\DataFixtures;
use App\Entity\Address;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class AddressFixture extends Fixture
{
public function load(ObjectManager $manager)
{
$address = new Address();
$address->setStreet('Sai Apartment');
$address->setCity('Noida');
$address->setState('Uttar Pradesh');
$address->setCountry('India');
$address->setPincode('201301');
$manager->persist($address);
$manager->flush();
}
}
UsersFixture.php
namespace App\DataFixtures;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class AddressFixture extends Fixture
{
public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}
public function load(ObjectManager $manager)
{
$user = new User();
$user->setFName('Kumar');
$user->setLName('Saurabh');
$user->setUsername('supa-admin');
$user->setPassword(
$this->encoder->encodePassword($user, 'querty')
);
$user->setEmail('some_email@gmail.com');
$user->setAddress($address);
$user->setContact(78954);
$user->setGender('male');
$user->setAge(26);
$user->persist($user);
$manager->flush();
}
}
Тогда я запустил:
$ php bin / console доктрина: fixtures: load
Оба способа не дали мне требуемого результата.Как создать приборы, когда между обеими таблицами используется внешний ключ?