태그 보관물: entities

entities

유형과 ID에서 엔티티 번들을 어떻게 얻을 수 있습니까? type과 id. 예를 들어, type가 ‘node’이고 id7이면

나는 식별해야 bundle그에서 엔티티의 typeid.

예를 들어, type가 ‘node’이고 id7이면 ‘page’가로 표시 될 수 있습니다 bundle.

감사



답변

entity_load@Nikhil이 언급 한대로 엔티티를로드하는 데 사용하십시오 .

그런 다음 entity_extract_ids 를 사용하여 번들을 추출하십시오. 예:

$entity = entity_load('node', array('7'));

list(, , $bundle) = entity_extract_ids('node', $entity);

echo "Bundle name is : " . $bundle;

이 함수 entity_extract_ids는 다음 요소를 포함하는 숫자 인덱스 배열 (해시 테이블이 아님)을 반환합니다.

  • 0 : 엔터티의 기본 ID입니다.
  • 1 : 엔티티의 개정 ID 또는 $ entity_type의 버전이 지정되지 않은 경우 NULL입니다.
  • 2 : 엔티티의 번들 이름. $ entity_type에 번들이없는 경우 NULL입니다.

여기서, 0, 1, 및 2배열 인덱스이다. 그러나 코어 및 contrib 모듈에서 사용하는 방법은이 list()기능 을 사용하는 것입니다.


답변

다음은 Organic groups 모듈 코드에서 얻은 가장 깨끗한 것입니다.

$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();

예를 들어 다음과 같이 호출 할 수 있습니다.

$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();

편집 : @Clive가 지적했듯이 위의 방법은 엔티티 모듈에 따라 다릅니다.

추가 모듈에 의존하지 않는 다른 방법이 있습니다. https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW에 설명되어 있습니다.

해당 방법을 붙여 넣기 :

function _entity_get_bundle($entity, $entity_type) {
  $info = entity_get_info($entity_type);
  if (empty($info['entity keys']['bundle'])) {
    return $entity_type;
  } else {
    return $entity->{$info['entity keys']['bundle']};
  }
}


답변

entity_load를 시도 하십시오

데이터베이스에서 엔티티를로드하십시오.

엔티티는 정적 메모리 캐시에 저장되며 동일한 페이지 요청 중에 다시로드 된 경우 데이터베이스 액세스가 필요하지 않습니다.

매개 변수

$ entity_type :로드 할 엔티티 유형 (예 : 노드 또는 사용자).

$ ids : 엔터티 ID의 배열 또는 모든 엔터티를로드하는 FALSE

$ conditions : (더 이상 사용되지 않음) 키가 데이터베이스 필드이고 값이 해당 필드에 있어야하는 값인 기본 테이블의 연관 조건 배열입니다. 대신 EntityFieldQuery를 사용하여이 함수로로드 할 수있는 엔티티 ID 목록을 검색하는 것이 좋습니다.

$ reset : 요청 된 엔티티 유형의 내부 캐시를 재설정할지 여부입니다.

반환 값

ID로 색인이 생성 된 엔티티 객체의 배열입니다. 결과가 없으면 빈 배열이 반환됩니다.


답변

성능 측면에서 매우 가벼운 방법으로 노드 ID에서 노드 유형을 가져 오려면 노드 테이블에서 단일 선택 쿼리를 사용할 수 있습니다.

$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
                  array(':nid' => $nid))->fetchField();

그렇게하면 entity_load 등을 사용하여 전체 엔티티 후크 시스템을 호출 할 필요가 없습니다.

인덱싱 된 노드 ID를 사용하는 단일 선택 쿼리입니다.


답변