คำถามติดแท็ก doctrine

14
Doctrine2: วิธีที่ดีที่สุดในการจัดการแบบตัวต่อตัวกับคอลัมน์พิเศษในตารางอ้างอิง
ฉันสงสัยว่าอะไรดีที่สุดสะอาดและเป็นวิธีที่ง่ายที่สุดในการทำงานกับความสัมพันธ์แบบหลายต่อหลายคนใน Doctrine2 สมมติว่าเรามีอัลบั้มอย่างMaster of Puppetsโดย Metallica ที่มีหลายแทร็ก แต่โปรดทราบความจริงที่ว่าหนึ่งแทร็กอาจปรากฏในมากกว่าหนึ่งอัลบั้มเช่นBattery by Metallicaทำ - อัลบั้มที่สามมีเนื้อเรื่องนี้ ดังนั้นสิ่งที่ฉันต้องการคือความสัมพันธ์แบบหลายต่อหลายกลุ่มระหว่างอัลบั้มและแทร็กโดยใช้ตารางที่สามกับคอลัมน์เพิ่มเติมบางอย่าง (เช่นตำแหน่งของแทร็กในอัลบั้มที่ระบุ) ที่จริงฉันต้องใช้ตามเอกสารของ Doctrine แนะนำความสัมพันธ์แบบหนึ่งต่อหลายสองครั้งเพื่อให้บรรลุการทำงานนั้น /** @Entity() */ class Album { /** @Id @Column(type="integer") */ protected $id; /** @Column() */ protected $title; /** @OneToMany(targetEntity="AlbumTrackReference", mappedBy="album") */ protected $tracklist; public function __construct() { $this->tracklist = new \Doctrine\Common\Collections\ArrayCollection(); } public …

19
Doctrine - วิธีการพิมพ์ sql จริงไม่ใช่แค่คำสั่งที่เตรียมไว้?
เรากำลังใช้ Doctrine, PHP ORM ฉันกำลังสร้างแบบสอบถามเช่นนี้: $q = Doctrine_Query::create()->select('id')->from('MyTable'); และจากนั้นในฟังก์ชั่นที่ฉันเพิ่มเข้าไปในส่วนที่มีคำสั่งและสิ่งต่าง ๆ ตามความเหมาะสมเช่นนี้ $q->where('normalisedname = ? OR name = ?', array($string, $originalString)); ต่อมาก่อนที่จะexecute()สอบถามวัตถุนั้นฉันต้องการพิมพ์ raw SQL เพื่อตรวจสอบและทำสิ่งนี้: $q->getSQLQuery(); อย่างไรก็ตามจะพิมพ์เฉพาะข้อความสั่งที่เตรียมไว้ไม่ใช่แบบสอบถามแบบเต็ม ฉันต้องการที่จะเห็นสิ่งที่มันถูกส่งไปยัง MySQL แต่แทนที่จะพิมพ์คำสั่งที่เตรียมไว้รวมถึง?ของ มีวิธีดูข้อความค้นหา "เต็ม" หรือไม่

10
PHP ORMs: หลักคำสอนเทียบกับขับเคลื่อน
ฉันกำลังเริ่มโปรเจ็กต์ใหม่ด้วยsymfonyซึ่งรวมเข้ากับDoctrine and Propelได้อย่างง่ายดายแต่แน่นอนว่าฉันต้องเลือก .... ฉันสงสัยว่าคนที่มีประสบการณ์มากกว่านั้นมีข้อดีและ / หรือข้อเสียทั่วไปในการไปด้วยหรือไม่ ทั้งสองอย่างนี้? ขอบคุณมาก. แก้ไข: ขอบคุณสำหรับคำตอบทั้งหมดสิ่งที่มีประโยชน์ ไม่มีคำตอบที่ถูกต้องอย่างแท้จริงสำหรับคำถามนี้ดังนั้นฉันจะทำเครื่องหมายว่าอนุมัติแล้วคำถามที่ได้รับความนิยมสูงสุด
126 php  orm  symfony1  doctrine  propel 

5
เรียงลำดับตามหลายคอลัมน์ด้วยหลักคำสอน
ฉันต้องการเรียงลำดับข้อมูลตามสองคอลัมน์ (เมื่อแถวมีค่าต่างกันสำหรับคอลัมน์หมายเลข 1 ให้เรียงลำดับตามนั้นมิฉะนั้นเรียงลำดับตามคอลัมน์หมายเลข 2) ฉันใช้QueryBuilderเพื่อสร้างแบบสอบถาม หากฉันเรียกorderByวิธีนี้เป็นครั้งที่สองจะแทนที่คำสั่งที่ระบุไว้ก่อนหน้านี้ ฉันสามารถส่งสองคอลัมน์เป็นพารามิเตอร์แรก: ->orderBy('r.firstColumn, r.secondColumn', 'DESC'); แต่ฉันไม่สามารถส่งสองทิศทางการสั่งซื้อสำหรับพารามิเตอร์ที่สองได้ดังนั้นเมื่อฉันดำเนินการสืบค้นนี้คอลัมน์แรกจะถูกเรียงลำดับจากน้อยไปมากและคอลัมน์ที่สองจากมากไปหาน้อย ฉันต้องการใช้จากมากไปหาน้อยสำหรับทั้งสองคน มีวิธีทำโดยใช้QueryBuilderไหม ฉันจำเป็นต้องใช้ DQL หรือไม่?

1
หลักคำสอน 2 ไม่สามารถใช้ nullable = false ในความสัมพันธ์ manyToOne ได้หรือไม่?
Userมีหนึ่งPackageที่เกี่ยวข้องกับมัน ผู้ใช้หลายคนสามารถอ้างถึงแพ็กเกจเดียวกัน Userไม่สามารถดำรงอยู่ได้หากไม่มีการPackageกำหนด Userควรเป็นเจ้าของความสัมพันธ์ ความสัมพันธ์เป็นแบบสองทิศทางดังนั้นจึงPackageมีผู้ใช้เป็นศูนย์หรือมากกว่านั้น ข้อกำหนดเหล่านี้นำไปสู่ManyToOneความสัมพันธ์UserและOneToManyความสัมพันธ์ของPackageหลักคำสอน 2 อย่างไรก็ตามpackage_idในuserตาราง (นั่นคือคีย์ต่างประเทศ) อนุญาตให้มีnullค่า ฉันได้ลองตั้งค่าnullable=falseแต่คำสั่ง: php app/console doctrine:generate:entities DL --path="src" --no-backup บอกว่ามีแอตทริบิวต์ไม่มีสำหรับความสัมพันธ์nullable ฉันขาดอะไรไป?ManyToOne class User { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Package", inversedBy="users") */ private $package; } class Package { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") …


7
ตั้งค่า Id ด้วยหลักคำสอนอย่างชัดเจนเมื่อใช้กลยุทธ์ "อัตโนมัติ"
หน่วยงานของฉันใช้คำอธิบายประกอบนี้เพื่อเป็น ID: /** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="AUTO") */ protected $id; จากฐานข้อมูลที่สะอาดฉันกำลังนำเข้าในระเบียนที่มีอยู่จากฐานข้อมูลรุ่นเก่าและพยายามเก็บ ID เดียวกันไว้ จากนั้นเมื่อเพิ่มระเบียนใหม่ฉันต้องการให้ MySQL เพิ่มคอลัมน์ ID โดยอัตโนมัติตามปกติ น่าเสียดายที่ดูเหมือนว่า Doctrine2 จะละเว้น ID ที่ระบุโดยสิ้นเชิง โซลูชั่นใหม่ ตามคำแนะนำด้านล่างต่อไปนี้เป็นทางออกที่ต้องการ: $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()); โซลูชันเก่า เนื่องจากหลักคำสอนหมุนออกจาก ClassMetaData เพื่อกำหนดกลยุทธ์ตัวสร้างจึงต้องแก้ไขหลังจากจัดการเอนทิตีใน EntityManager: $this->em->persist($entity); $metadata = $this->em->getClassMetaData(get_class($entity)); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); $this->em->flush(); ฉันเพิ่งทดสอบสิ่งนี้บน MySQL และทำงานได้ตามที่คาดไว้หมายความว่าเอนทิตีที่มี ID ที่กำหนดเองจะถูกเก็บไว้ด้วย …

1
cascade = {“ remove”} VS orphanRemoval = true VS ondelete = "CASCADE
ฉันพยายามรวบรวมข้อมูลบางอย่างเกี่ยวกับวิธีต่อไปนี้เพื่อลบเอนทิตีลูกโดยอัตโนมัติเมื่อเอนทิตีแม่ถูกลบ ดูเหมือนว่าวิธีที่พบมากที่สุดคือการใช้หนึ่งในบรรดาสามคำอธิบายประกอบ: น้ำตก = { "ลบ"}หรือorphanRemoval = trueหรือondelete = "น้ำตก" ฉันสับสนเล็กน้อยเกี่ยวกับข้อที่สาม: ondelete = "CASCADE"เนื่องจากคำอธิบายในเอกสารอย่างเป็นทางการของหลักคำสอนเกี่ยวกับเรื่องนี้หายากมาก) และฉันจะชอบถ้ามีคนยืนยันข้อมูลต่อไปนี้ที่ฉันรวบรวมและเข้าใจจากการวิจัยของฉันเกี่ยวกับ สุทธิและประสบการณ์ ... มันทำอะไร cascade = {"remove"} ==> เอนทิตีทางด้านผกผันจะถูกลบเมื่อเอนทิตีฝั่งเจ้าของคือ แม้ว่าคุณจะอยู่ในหลายกลุ่มที่มีเอนทิตีด้านการเป็นเจ้าของอื่น - ควรใช้ในการรวบรวม (ดังนั้นในความสัมพันธ์ OneToMany หรือ ManyToMany) - การใช้งานใน ORM orphanRemoval = true ==> เอนทิตีที่อยู่ด้านผกผันจะถูกลบเมื่อเอนทิตีฝั่งเจ้าของคือและไม่ได้เชื่อมต่อกับเอนทิตีฝั่งที่เป็นเจ้าของอื่น ๆ อีกต่อไป (อ้างอิง คำสอน official_doc - การนำไปใช้ใน ORM - สามารถใช้ได้กับ OneToOne, OnetoMany …

12
วิธีเข้ารหัสเอนทิตีหลักคำสอนเป็น JSON ในแอปพลิเคชัน Symfony 2.0 AJAX
ฉันกำลังพัฒนาแอพเกมและใช้ Symfony 2.0 ฉันมีคำขอ AJAX จำนวนมากไปยังแบ็กเอนด์ และการตอบสนองเพิ่มเติมคือการแปลงเอนทิตีเป็น JSON ตัวอย่างเช่น: class DefaultController extends Controller { public function launchAction() { $user = $this->getDoctrine() ->getRepository('UserBundle:User') ->find($id); // encode user to json format $userDataAsJson = $this->encodeUserDataToJson($user); return array( 'userDataAsJson' => $userDataAsJson ); } private function encodeUserDataToJson(User $user) { $userData = array( 'id' => $user->getId(), …

2
Doctrine Hydration คืออะไร? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันได้อ่านเกี่ยวกับการขาดน้ำในเอกสารของหลักคำสอน แต่ฉันยังไม่เข้าใจว่ามันคืออะไร ใครช่วยอธิบายหน่อย

1
การเลิกใช้: Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy โดยไม่ทำให้หมายเลขที่ทราบถูกเลิกใช้
ฉันใช้ Symfony 4.3.8 และฉันไม่สามารถหาข้อมูลเกี่ยวกับการคัดค้านเหล่านี้ได้: ผู้ใช้เลิกใช้งาน: การสร้าง Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy โดยไม่ทำให้หมายเลขทราบถูกคัดค้านและจะถูกลบใน Doctrine ORM 3.0 การสร้าง Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy โดยไม่ทำให้หมายเลขทราบถูกคัดค้านและจะถูกลบใน Doctrine ORM 3.0 ฉันค้นหาใน stacktrace และพบสิ่งนี้: class UnderscoreNamingStrategy implements NamingStrategy { private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/'; private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/'; /** * Underscore …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.