Điểm:0

lập trình lấy các nút con tham chiếu gốc theo uuid tham chiếu thực thể, sử dụng loadByProperties & entityTypeManager hoặc cách khác mà không có chế độ xem

lá cờ cn

Tôi đã thử câu trả lời này:

https://drupal.stackexchange.com/a/298084/1082

Nhưng tôi dường như không thể sử dụng

'field_scientists' => $entity_reference_uuid

ở đâu, trong trường hợp của tôi, field_scientists là trường thuộc loại Tham chiếu thực thể UUID - là loại trường được cung cấp bởi https://www.drupal.org/project/entity_reference_uuid mô-đun

Điều xảy ra với tôi là tôi không nhận được gì, mảng kết quả của tôi từ ví dụ đó trống.

Tìm cách thực hiện việc này theo chương trình trong mô-đun tùy chỉnh của riêng tôi, thay vì sử dụng Chế độ xem Drupal.

Nếu có một cách khác, ví dụ: mà sử dụng -> truy vấn phương pháp truy vấn cơ sở dữ liệu, tôi rất sẵn lòng sử dụng phương pháp có lập trình đó.

Cảm ơn bạn.

Cập nhật

Một ví dụ về một uuid của một nút trong trường hợp của tôi là BMSSYS0000051988.

Điều này đã được đặt trong quá trình nhập di chuyển từ một trường trong CSV.

nỗ lực của tôi là:

1. dựa trên ví dụ trong câu hỏi khác: https://drupal.stackexchange.com/a/298084/1082

  $nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
    'loại' => 'bol',
    'field_parent_uuid' => $taxonkey,
  ]);

2. truy vấn cơ sở dữ liệu

$query = \Drupal::entityQuery('nút')
->điều kiện('trạng thái', NODE_PUBLISHED)
->điều kiện('loại', 'bol');
$and = $query->andConditionGroup();
$and->condition('field_parent_uuid', $taxonkey);
$truy vấn->điều kiện($và);
$result = $query->execute();

ở đâu $taxonkeyBMSSYS0000051988

cả hai lần thử 1 và 2 ở trên đều trả về một mảng trống.

cập nhật 2

đây là cấu hình di chuyển của tôi hiển thị uuid được ghi vào từ một trường trong csv. Điều này có hợp pháp không? Mã của nhà phát triển có nên thay đổi giá trị uuid hay uuid chỉ nên được xử lý bởi lõi Drupal?

phụ thuộc: { }
id: bol_csv_import
lớp: không
trường_plugin_method: null
cck_plugin_method: null
thẻ_di chuyển: null
migration_group: defaultl: publicbins
nhãn: 'Nhập dữ liệu loài bol'
nguồn:
  plugin: csv
  đường dẫn: ./data/taxonomy_species_with_unpacked_bold.csv
  dấu phân cách: ','
  bao vây: '"'
  tiêu đề_offset: 0
  id:
    - uid
  lĩnh vực:
    -
      tên: uuidl: publicbins
      nhãn: 'ID NBN'
    -
      tên: parent_uuid
      nhãn: 'ID NBN của cha mẹ'
    -
      tên tên
      nhãn: Tên
    -
      tên: thứ hạng
      nhãn: 'Xếp hạng phân loại'
    -
      tên: taxon_key
      nhãn: 'Khóa đơn vị phân loại'
    -
      tên: chính quyền
      nhãn: thẩm quyền
    -
      tên: hồ sơ mẫu vật
      nhãn: hồ sơ mẫu vật
    -
      tên: publicrecords
      nhãn: hồ sơ công khai
    -
      tên: publicbins
      nhãn: thùng rác công cộng
    -
      tên: taxi
      nhãn: 'ID đơn vị phân loại NBN'
tiến trình:
  tên tiêu đề
  uid:
    plugin: default_value
    default_value: 1
  uuid: uuid
  trường_parent_uuid: parent_uuid
  trường_taxon_key: taxon_key
  field_authority: thẩm quyền
  field_rank: xếp hạng
  field_num_bold_barcode_specimens: bản ghi mẫu vật
  field_num_bold_public_records: bản ghi công khai
  field_num_bold_public_bins: thùng rác công cộng
  field_bold_taxon_id: thuế
  loại:
    plugin: default_value
    default_value: bol
điểm đến:
  plugin: 'thực thể: nút'
di chuyển_phụ thuộc: null

cập nhật 3

Tôi sẽ viết một truy vấn db để giải quyết vấn đề này. Chạy một dòng lệnh sql cho biết phương pháp này có thể hoạt động:

MariaDB [db]> select * from node where nid = 246;
+-----+------+------+-----------------+---------- +
| không | vid | loại | uuid | mật mã |
+-----+------+------+-----------------+---------- +
| 246 | 248 | bóng | NBNORG0000041189 | vi |
+-----+------+------+-----------------+---------- +
1 hàng trong bộ (0,001 giây)
4uk4 avatar
lá cờ cn
`BMSSYS0000051988` không phải là [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier).
lá cờ cn
+1 Cảm ơn bạn @4uk4 có thể hữu ích `uuid` đã được đặt như vậy trong quá trình di chuyển. Khi tôi thực hiện `$node->uuid();` thì `BMSSYS0000051988` là những gì tôi nhận được. Bạn có biết liệu `uuid` nên được đặt theo mã riêng của nhà phát triển hay chỉ nên đặt bởi chính Drupal Core?
lá cờ cn
Tôi đã thêm cấu hình di chuyển vào câu hỏi của mình để cho biết cách uuid được viết bằng `BMSSYS0000051988`. Nếu điều này là "bất hợp pháp" ở chỗ chỉ lõi Drupal mới quản lý và tạo/ghi `uuid`, thì điều đó sẽ thúc đẩy chiến lược của tôi b) triển khai giải pháp thay thế để tránh sử dụng uuid theo cách này: https://drupal.stackexchange .com/questions/310697/programmatically-get-child-nodes-referencing-parent-by-entity-reference-uuid-us?noredirect=1#comment395034_310699
4uk4 avatar
lá cờ cn
Không, không phải chỉ lõi Drupal mới quản lý UUID. Một trong những điểm bán hàng chính là UUID là duy nhất trên toàn thế giới, vì vậy bạn có thể di chuyển chúng từ trang này sang trang khác và chúng vẫn là duy nhất. Nhưng tôi sẽ không sử dụng trường UUID cho dữ liệu khác ngoài UUID. Đặt giá trị không phải UUID vào trường riêng của nó và sử dụng UUID để chéo các mục dữ liệu tham chiếu trong nguồn và/hoặc đích của quá trình di chuyển. Nơi bạn tạo UUID không quan trọng.
lá cờ cn
+1 đồng ý. Tôi muốn quá trình di chuyển không nhập dữ liệu trường đó vào `uuid` mà thay vào đó là một trường thông thường khác.Tuy nhiên, tôi cần làm việc với những gì mình có, vì vậy trong 'Bản cập nhật 3' của mình, tôi sẽ viết một truy vấn db.
Điểm:0
lá cờ cn

Về lý thuyết, điều này sẽ hoạt động, loại trường đặt UUID làm thuộc tính chính: EntityReferenceUuidItem:: mainPropertyName()

Có thể Drupal đang nhầm lẫn và xử lý trường này dưới dạng trường tham chiếu thực thể tiêu chuẩn vì nó mở rộng loại trường lõi.

Để làm rõ thuộc tính trường nào bạn đang truy vấn, hãy thêm thuộc tính trường đó bằng dấu chấm:

'field_scientists.target_uuid' => $entity_reference_uuid

Cái nào sẽ hoạt động cho cả hai, loadByProperties hoặc truy vấn thực thể:

->điều kiện('field_scientists.target_uuid', $entity_reference_uuid)

Cái đầu tiên chỉ là một lối tắt cho cái thứ hai sử dụng cùng một công cụ truy vấn.

lá cờ cn
Tôi sẽ thử điều này, sáng nay và lấy lại cho bạn - cảm ơn bạn cho đến nay.
lá cờ cn
Không may tôi sợ. Mảng trả về vẫn trống.
lá cờ cn
Trên cơ sở cách tiếp cận `điều kiện` tập trung vào cùng một công cụ truy vấn, tôi cũng có xu hướng không thử điều đó, dự đoán cùng một vấn đề thay vì thực hiện 2 điều a) nêu lỗi trên https://www.drupal.org/project/entity_reference_uuid và b) triển khai một công việc xung quanh, tạo một trường mới trong loại nội dung của tôi, đây là một tham chiếu thực thể cũ đơn giản (không phải với uuid), điền tham chiếu đến một nút và kiểm tra lại mã. Nếu hoạt động, hãy viết tập lệnh để điền vào phần còn lại của các nút (mặc dù có 100K nút). Việc điền sẽ sử dụng giá trị trường ref uuid thực thể hiện có để tìm nút cho trường mới.
4uk4 avatar
lá cờ cn
Có cách nào để tạo lại sự cố trên bản cài đặt mới không? Tôi không thể. Đối với tôi, nó hoạt động có và không có tên thuộc tính được nối thêm.
4uk4 avatar
lá cờ cn
b) như một công việc xung quanh tôi sẽ không tạo thêm dữ liệu. Thay vào đó, tôi sẽ viết SQL cấp thấp. Đây cũng là một bài kiểm tra tốt xem UUID mà bạn đang truy vấn có thực sự tồn tại hay không. Cấp thấp đây là một truy vấn đơn giản trên một bảng.
lá cờ cn
Lưu ý cảm ơn bạn @4uk4. Thiết lập của tôi có vẻ lạ. Nhìn vào trường uuid tham chiếu thực thể trong nút, đó là một chuỗi, giá trị của nó là từ một trường được nhập từ CSV. Trong chế độ chỉnh sửa, trường đó hiển thị dưới dạng tiêu đề nút cha với id nút của nó trong ngoặc. Hiện tại, tôi đang bối rối làm thế nào giá trị chuỗi đó có thể tham chiếu đến nút cha. Nhìn vào mô-đun UUID tham chiếu thực thể, tôi không tìm thấy bất kỳ cấu hình nào cũng như trong trường cung cấp manh mối. Tôi không biết trường nào được chỉ định là UUID. Một số mảnh ghép còn thiếu cho tôi.
lá cờ cn
Tôi nghĩ rằng tôi cần tìm ra cách lấy uuid của một nút để giúp tôi hiểu.
4uk4 avatar
lá cờ cn
`$uuid = $node->uuid();`
lá cờ cn
+1 cảm ơn bạn vâng, @4uk4 và ví dụ `uuid` trong trường hợp của tôi là `BMSSYS0000051988` . Tôi cũng đã cập nhật câu hỏi của mình, với thông tin bổ sung về những gì tôi đang thử. Cảm ơn bạn cho tất cả sự giúp đỡ của bạn.
lá cờ cn
có vẻ như đó là sự nhầm lẫn của tôi giữa giá trị của dữ liệu trong một trường thông thường và uuid. vì vậy câu trả lời của bạn là hợp lệ và tôi đồng ý sẽ hoạt động. Tôi sẽ viết thêm một số thông tin sau.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.