Làm thế nào để có được danh sách các trường được sử dụng trong các thực thể?


7

Tôi muốn truy xuất tất cả các trường mà các thực thể đang sử dụng (bao gồm các trường bị khóa).

Làm cách nào tôi có thể nhận được danh sách các trường được sử dụng trong các thực thể?

Giống như chúng tôi nhận được trong quản trị / báo cáo / lĩnh vực.

nhập mô tả hình ảnh ở đây


Bạn có muốn thực hiện việc này theo chương trình hoặc xem xét việc sử dụng các trường thông qua giao diện người dùng không?
autopoietic

Tôi muốn điều này theo lập trình ..
Ajay Reddy

Câu trả lời:


8

Tôi muốn giới thiệu EntityFieldManager :: getFieldMap . EntityManager chỉ là một dịch vụ để cung cấp các chức năng từ các lớp khác.

Từ tài liệu:

Giá trị trả về

mảng Một mảng được khóa theo loại thực thể. Mỗi giá trị là một mảng mà các khóa là tên trường và giá trị là một mảng có hai mục nhập:

  • loại : Loại trường.
  • : Một mảng kết hợp của các gói trong đó trường xuất hiện, trong đó các khóa và giá trị đều là tên máy của gói.

5

EntityFieldManagerInterface::getFieldMap() tạo ra một mảng được khóa theo loại thực thể> tên trường với thông tin thêm về loại trường và các gói liên quan của nó.

$field_map = \Drupal::entityManager()->getFieldMap();
$node_field_map = $field_map['node'];
$node_fields = array_keys($node_field_map['node']);

Cũng có EntityFieldManagerInterface::getFieldDefinitions()nếu bạn muốn siêu dữ liệu trường hơn nữa. Nó tạo ra một mảng BaseFieldDefinition& FieldConfigcác đối tượng mà bạn có thể phân tích để biết thêm chi tiết.

  $node_article_fields  =\Drupal::entityManager()->getFieldDefinitions('node','article');

Cảm ơn Shawn, tôi không nhận được các trường như họ đã liệt kê trong hình trên. Dưới đây là lĩnh vực tôi đang nhận được:comment, contact_message, file, node, shortcut, taxonomy_term, user, menu_link_content
Ajay Reddy

Có một lỗi đánh máy với mã. Như đã đề cập với câu trả lời, hàm tạo ra một mảng có chứa các thực thể, tên trường, sau đó là chi tiết trường.
Shawn Conn

Phương thức 'entityManager' không được dùng nữa. Sử dụng \ Drupal :: entityTypeManager () trong hầu hết các trường hợp
JF Kiwad

2

field_info_instance()sẽ làm những gì bạn muốn, mặc dù nếu bạn nhìn vào các tài liệu bạn sẽ thấy rằng trong D8, nó không được ủng hộ

Field::fieldInfo()->getBundleInstance($entity_type, $bundle, $field_name).

Cảm ơn câu trả lời của bạn, nhưng tôi cần lấy danh sách tất cả (các) trường chỉ được sử dụng. Tôi không muốn sử dụng theo loại thực thể, gói và tên trường. Đối với hình ảnh tải lên tham khảo.
Ajay Reddy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.