Score:0

การโอนย้ายอาร์เรย์ของค่าไปยังหลาย ๆ เอนทิตี

ธง ph

ฉันใช้โมดูล migrate/migrate_plus เพื่อนำเข้าไฟล์ CSV และสร้างเอนทิตี

หนึ่งในคอลัมน์ใน CSV สามารถมีค่าได้หลายค่า เช่น 1|2|3 ซึ่งฉันจะแปลงเป็นอาร์เรย์โดยใช้:

_เขตอำนาจศาล:
  ปลั๊กอิน: ระเบิด
  ที่มา: เขตอำนาจศาล
  ตัวคั่น: "|"

ฉันใช้อาร์เรย์เพื่อสร้างเงื่อนไขอนุกรมวิธานด้วยสิ่งนี้:

field_political_district:
  -
    ปลั๊กอิน: entity_generate
    ที่มา: "@_jurisdictions"
    ประเภทเอนทิตี: taxonomy_term
    กำ:political_district
    bundle_key: วิดีโอ
    value_key: ชื่อ
    ไม่สนใจกรณี: จริง
    ค่า:
      field_display_name: ???

ฉันติดอยู่สองสิ่ง:

  • ฉันต้องการเพิ่มค่าคงที่ต่อท้ายแต่ละชื่อเพื่อให้ชื่อคำศัพท์อนุกรมวิธานกลายเป็น "1, XYZ" โดยที่ XYZ มาจากค่าคงที่/ABC
  • ฉันต้องการให้ field_display_name เป็นค่าที่นำหน้าด้วย "District "

มีความคิดเห็นเกี่ยวกับวิธีการทำสองสิ่งนี้ให้สำเร็จหรือไม่?

ru flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [วิธีใช้ปลั๊กอินกระบวนการโยกย้าย concat หลายค่า](https://drupal.stackexchange.com/questions/307731/how-to-use-migrate-process-plugin-concat-on-multiple-values)
Lambic avatar
ph flag
ฉันเล่นโดยใช้ str_replace แต่ไม่รู้จักค่าคงที่ ดังนั้นหากฉันตั้งค่าแทนที่เป็นค่าคงที่/ABC ฉันจะได้รับ "ค่าคงที่/ABC" ตามตัวอักษร นอกจากนี้ ฉันไม่แน่ใจว่าจะใช้ในสถานการณ์ที่สองของการตั้งค่า field_display_name อย่างไร
ru flag
เฉพาะ `แหล่งที่มา:` เท่านั้นที่สามารถมีข้อมูลอ้างอิงได้ คีย์อื่นๆ ทั้งหมดจะถูกกำหนดค่าและใช้โดยค่า มันอาจจะ *สวยงามน่าพอใจ* หากมี `constant/something` แต่ในทางเทคนิคแล้ว การเขียนสตริงของคุณเป็น `replace: 'foo'` นั้นมีฮาร์ดโค้ดเหมือนกับการเขียนเป็น `constants/something: 'foo'`
Lambic avatar
ph flag
ใช่ นั่นคือเหตุผลที่ฉันใช้ str_replace ไม่ได้ ค่าคงที่มาจาก Deriver ดังนั้นจึงแตกต่างกันไปขึ้นอยู่กับ csv ใดที่กำลังประมวลผล
ru flag
แก้ไข: หากคุณใช้เวอร์ชันคอร์ >9.2 คุณอาจสร้าง [callback with unpack_source](https://www.drupal.org/node/3205079) บ้าๆ บอๆ
Lambic avatar
ph flag
ขอบคุณ นั่นคือสิ่งที่มองหา แค่ต้องการยืนยันว่าไม่มีวิธีนอกกรอบ .. ฉันจะโพสต์ปลั๊กอินเป็นคำตอบเมื่อฉันทำเสร็จแล้ว
ru flag
คุณอาจใช้การเรียกกลับ v9.2 ใหม่และสร้างตัวแปรตัวช่วยในส่วนกระบวนการของคุณ
Score:1
ธง ph

นี่คือปลั๊กอินที่กำหนดเองที่ฉันเขียน:

<?php

เนมสเปซ Drupal\mymodule\Plugin\migrate\process;

ใช้ Drupal\migrate\MigrateExecutableInterface
ใช้ Drupal\migrate\Row;
ใช้ Drupal\migrate_plus\Plugin\migrate\process\EntityGenerate
ใช้ Drupal\migrate_plus\Plugin\migrate\process\EntityLookup

/**
 * ปลั๊กอินนี้สร้างเอนทิตีของเขตภายในปลั๊กอินกระบวนการ
 *
 * @MigrateProcessPlugin(
 * id = "เขต_สร้าง"
 * )
 *
 * @ดู EntityGenerate
 *
 *@รหัส
 * กระบวนการ:
 * field_political_district:
 * ปลั๊กอิน: district_generate
 * ที่มา: เขตอำนาจศาล
 * district_set_name: ค่าคงที่/ABC
 * district_set_value: "@_district_set"
 * คำนำหน้า: "อำเภอ"
 * ... การกำหนดค่าเอนทิตี Generate อื่น ๆ
 * @endcode
 */
คลาส DistrictGenerate ขยาย EntityGenerate {

  /**
   * {@inheritdoc}
   */
  การแปลงฟังก์ชันสาธารณะ ($value, MigrateExecutableInterface $migrateExecutable, แถว $row, $destinationProperty) {
    $this->row = $แถว;
    $this->migrateExecutable = $migrateExecutable;
    $name = $value;
    ถ้า (isset($this->configuration['district_set_name'])) {
      $suffix = $row->get($this->configuration['district_set_name']);
      $ชื่อ = $ชื่อ ',' . $ต่อท้าย;
    }
    // สร้างเอนทิตีหากการค้นหาระบุว่าไม่มีอยู่จริง
    ถ้า (!($result = EntityLookup::transform($name, $migrateExecutable, $row, $destinationProperty))) {
      ถ้า (isset($this->configuration['district_set_value'])) {
        $this->configuration['values']['field_district_set'] = $this->configuration['district_set_value'];
      }
      $prefix = $this->configuration['คำนำหน้า'] ?? 'เขต';
      $this->configuration['default_values']['field_display_name'] = $prefix ' ' . มูลค่า $;
      $result = $this->generateEntity($ชื่อ);
    }
    ส่งคืนผลลัพธ์ $;
  }

}

โพสต์คำตอบ

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