Score:0

Drupal โยกย้าย - ตัวเลือก "--limit" ใช้งานได้สำหรับการรันครั้งแรกเท่านั้น

ธง in

ฉันมีปลั๊กอินต้นทางที่กำหนดเอง (นำเข้าจาก MongoDB) และเมื่อฉันเรียกใช้การย้ายข้อมูลเป็นครั้งแรก เช่น:

drush mim บทความ --limit=10

ใช้งานได้ดี: กำลังนำเข้า 10 บทความและหยุดกระบวนการ

แต่ถ้าฉันทำซ้ำคำสั่งนั้นจะนำเข้าเพียง 1 บทความ

และถ้าฉันมีบทความที่นำเข้า 10 รายการและเรียกใช้อีกครั้งด้วย limit=20 ก็จะนำเข้าบทความใหม่ 10 รายการ

และถ้าฉันกำหนดขีดจำกัดให้น้อยกว่าจำนวนปัจจุบันที่นำเข้า ก็จะนำเข้าเพียง 1 แถวใหม่

คำสั่ง ฉันระบุ ให้นำเข้า 10 แถวใหม่เสมอ (หากมี ยังไม่ได้ประมวลผล)

ยินดีต้อนรับคำแนะนำใด ๆ !

(ใช้ drush 11.0.7 และ Drupal 9.3.12) (แก้ไข)

อัปเดต:

ดังนั้นดูเหมือนว่ารหัสที่นับจำนวนแถวที่ประมวลผลแล้วและตรวจสอบว่าพารามิเตอร์ถึงขีด จำกัด ทำงานได้ไม่ดีหรือไม่ นั่นคือมันนับแถวที่ประมวลผลก่อนหน้านี้ด้วยซึ่งไม่ควรเป็นกรณีนี้

in flag
ดูเหมือนว่าปลั๊กอินต้นทางของฉันมีหน้าที่รับผิดชอบในการข้ามแถวที่ประมวลผล (ตอบโดย @mikelutz เมื่อหย่อน) ดูเหมือนว่าในกรณีของฉันแถวที่ประมวลผลจะไม่ถูกข้าม แต่จะนับอีกครั้ง แต่ฉันไม่ได้แทนที่เมธอด next() ตัวอย่างใด ๆ เกี่ยวกับวิธีการทำเช่นนี้?
in flag
เมธอด next() (ซึ่งฉันไม่ได้แทนที่) ของ SourcePluginBase (ซึ่งฉันใช้เป็นคลาสพื้นฐาน) ควรตรวจสอบว่าแถวได้รับการประมวลผลแล้วหรือไม่ แต่ดูเหมือนว่าจะล้มเหลว ฉันเคยมีปัญหากับเงื่อนไขแบบนั้นมาก่อน เมื่อผ่านการประมวลผลก่อนหน้านี้จะได้รับการประมวลผลอีกครั้งเสมอ และแก้ไขได้ด้วยการอัปเดต drush
Score:0
ธง in

ฉันแก้ไขด้วยวิธีนี้:

ต้นฉบับ next() ของ SourcePluginBase มีการตรวจสอบว่าจำเป็นต้องมีการประมวลผลแถวหรือไม่ด้วยวิธีนี้:

  ถ้า (!$row->getIdMap() || $row->needsUpdate() || $this->aboveHighWater($row) || $this->rowChanged($row)) {
    $this->currentRow = $row->freezeSource();
  }

ตอนนี้ในชั้นเรียนของฉันที่สืบทอด SourcePluginBase นั้นฉันได้เพิ่มการแทนที่การเตรียมการแถว:

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ prepareRow (แถว $ แถว) {
    ถ้า (!$row->getIdMap() || $row->needsUpdate() || $this->aboveHighWater($row)) {
      ส่งคืนพาเรนต์::prepareRow($row);
    }
    กลับ FALSE;
  }

ฉันสังเกตเห็นว่าสำหรับแถวที่นำเข้าก่อนหน้านี้ เงื่อนไข $this->rowChanged($row) เป็นจริง และสำหรับแถวใหม่ที่ต้องประมวลผล $this->rowChanged($row) เป็นจริง ดังนั้นฉันจึงลบอันแรกออกและเก็บอันที่สองไว้

ฉันทราบดีว่านี่เป็นวิธีแก้ปัญหาและอาจมีความเข้ากันไม่ได้ระหว่าง drush และ drupal แต่นี่เป็นวิธีแก้ปัญหาที่ดีที่สุดที่ฉันสามารถทำได้ หากมีใครมีวิธีแก้ปัญหา / คำอธิบายที่ดีกว่าฉันยินดีที่จะรับฟัง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา