I (eklentiler ve güncellemeler ile) members
ithalat toplu üzerinde çalışıyorum çalışmak için deneyin.Doctrine2 toplu alma varlıklar gibi <code>Member</code>, <code>Client</code>, <code>Group</code>, <code>...</code> bir sürü büyük bir proje için başka bir varlık
Doktrin doc toplu ithalatla ilgili bölümü okuduktan sonra, ben bu kodu uyguladık: Ben Member
varlıklar dizisi işlemek toplu istediğinizde, Şimdi
$batchSize = 20;
$i = 0;
foreach ($entities as $entity)
{
$this->getEntityManager()->persist($entity);
if (($i % $batchSize) === 0)
{
$this->getEntityManager()->flush();
$this->getEntityManager()->clear();
}
}
$this->getEntityManager()->flush();
$this->getEntityManager()->clear();
, Doktrin boş veri eklemeye çalıştığınızda Member
ve Group
arasında herhangi ilişkiler bulunmamaktadır istisna
An exception occurred while executing 'INSERT INTO groups ...
atılır ve Group
şirketle alakalı tamamen başka tabloya ... içine
Bu garip davranış hakkında bir fikrin var mı?
DÜZENLEME
Kısa haritalama ayrıntıları:
/**
* @ORM\Entity
* @ORM\Table(name="members")
*/
class Member
{
// some properties ...
/**
* @ORM\ManyToOne(targetEntity="Client", inversedBy="members", cascade={"persist", "merge"})
* @ORM\JoinColumn(name="client_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $client;
/**
* @return Client
*/
public function getClient()
{
return $this->client;
}
/**
* @param Client $client
*
* @return $this
*/
public function setClient(Client $client)
{
$this->client = $client;
return $this;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="clients")
*/
class Client
{
/**
* @ORM\OneToMany(targetEntity="Member", mappedBy="client", cascade={"persist", "remove", "merge"}, fetch="EXTRA_LAZY")
*/
protected $members;
/**
* @ORM\ManyToOne(targetEntity="Group", inversedBy="clients", cascade={"persist", "merge"})
* @ORM\JoinColumn(name="clients_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $group;
public function __construct()
{
$this->members = new ArrayCollection();
}
/**
* @return ArrayCollection
*/
public function getMembers()
{
return $this->members;
}
/**
* @param $members
*
* @return $this
*/
public function setMembers($members)
{
$this->members = new ArrayCollection();
return $this->addMembers($members);
}
/**
* @param $members
*
* @return $this
*/
public function addMembers($members)
{
foreach ($members as $member)
{
$this->addMember($member);
}
return $this;
}
/**
* @param Member $member
*
* @return $this
*/
public function addMember(Member $member)
{
$this->members->add($member);
$member->setClient($this);
return $this;
}
/**
* @param Member $member
*
* @return $this
*/
public function removeMember(Member $member)
{
if ($this->members->contains($member))
{
$this->members->removeElement($member);
}
return $this;
}
/**
* @param $members
*
* @return $this
*/
public function removeMembers($members)
{
foreach ($members as $member)
{
$this->removeMember($member);
}
return $this;
}
/**
* @param Group $group
*
* @return $this
*/
public function setGroup(Group $group = null)
{
$this->group = $group;
return $this;
}
/**
* @return Group
*/
public function getGroup()
{
return $this->group;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="groups")
*/
class Group
{
/**
* @ORM\OneToMany(targetEntity="Client", mappedBy="group")
*/
protected $clients;
public function __construct()
{
$this->clients = new ArrayCollection();
}
/**
* @return ArrayCollection
*/
public function getClients()
{
return $this->clients;
}
/**
* @param $clients
*
* @return $this
*/
public function setClients($clients)
{
$this->clients = new ArrayCollection();
return $this->addClients($clients);
}
/**
* @param $clients
*
* @return $this
*/
public function addClients($clients)
{
foreach ($clients as $client)
{
$this->addClient($client);
}
return $this;
}
/**
* @param Client $client
*
* @return $this
*/
public function addClient(Client $client)
{
if (!$this->clients->contains($client))
{
$this->clients->add($client);
$client->setGroup($this);
}
return $this;
}
/**
* @param $clients
*
* @return $this
*/
public function removeClients($clients)
{
foreach ($clients as $client)
{
$this->removeClient($client);
}
return $this;
}
/**
* @param Client $client
*
* @return $this
*/
public function removeClient(Client $client)
{
if ($this->clients->contains($client))
{
$this->clients->removeElement($client);
$client->setGroup(null);
}
return $this;
}
}
Ve hata tipi ise:
An exception occurred while executing 'INSERT INTO groups ... SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "label" violates not-null constraint DETAIL: Failing row contains (60, null, f, null, f, null, null).
EDIT2
Bu tablo oluşturma açıklamasıdır (kullanarak postgresql):
CREATE TABLE groups (
id integer NOT NULL,
tempref character varying(255) DEFAULT NULL::character varying,
prorated_basis boolean NOT NULL,
fixed_price_amount double precision,
is_indexed boolean,
pricing_grid pricing[],
label character varying(255) NOT NULL
);
CREATE SEQUENCE groups
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE groups_id_seq OWNED BY groups.id;
ALTER TABLE ONLY pricing_groups ALTER COLUMN id SET DEFAULT nextval('groups_id_seq'::regclass);
ALTER TABLE ONLY groups
ADD CONSTRAINT groups_pkey PRIMARY KEY (id);
şansın Eğer soruya bu iki sınıfın haritalama ayrıntıları eklemek olabilir? Bu döngüde ilerlemek için bir hata ayıklayıcısını kullanmayı denediniz mi ve bu özel durumun yalnızca ilk döngü yinelemesinde mi yoksa daha sonraki iterasyonlarda mı gerçekleştiğini görmek için denediniz mi? – Fge
Merhaba Fge, geç cevap için üzgünüm ... Bu konu hakkında daha fazla bilgi almak için lütfen EDIT'imi kontrol edin. zaman – ceadreak
için teşekkürler ben veritabanı tablosu yapısı ile uyumlu olması görünmüyor bir ayıklayıcı ancak hata floş – ceadreak