আমার সত্তা এই আইডিটির জন্য এই টিকাটি ব্যবহার করে:
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
একটি পরিষ্কার ডাটাবেস থেকে, আমি একটি পুরানো ডাটাবেস থেকে বিদ্যমান রেকর্ড আমদানি করছি এবং একই আইডি রাখার চেষ্টা করছি। তারপরে, নতুন রেকর্ড যুক্ত করার সময়, আমি মাইএসকিউএলকে যথারীতি আইডি কলামটি স্বয়ংক্রিয়ভাবে বাড়িয়ে তুলতে চাই।
দুর্ভাগ্যক্রমে, এটি প্রদর্শিত হয় Doctrine2 সম্পূর্ণরূপে নির্দিষ্ট আইডি উপেক্ষা করে।
নতুন সমাধান
নীচে সুপারিশ অনুযায়ী, নিম্নলিখিত পছন্দসই সমাধান:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator());
ওল্ড সলিউশন
কারণ জেনারেটর কৌশল নির্ধারণের জন্য মতবাদ ক্লাসমেটাডাটা থেকে দূরে রয়েছে, সত্তা ম্যানেজারে সত্তাটি পরিচালনা করার পরে এটি সংশোধন করতে হবে:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$this->em->flush();
আমি এটি এখনই মাইএসকিউএলে পরীক্ষা করেছি এবং এটি প্রত্যাশার মতো কাজ করেছে, যার অর্থ একটি কাস্টম আইডি সহ সত্তা সেই আইডি সহ সঞ্চিত ছিল, যখন একটি আইডিবিহীন তারা ব্যবহার করত lastGeneratedId() + 1
।