Drupal 7에서는 매개 변수를 node_load_multiple()
사용하여 지정 하기위한 API 문서 $conditions
가 사용되지 않기 때문에 사용되지 않습니다 EntityFieldQuery
. 클래스를 사용하여 노드 ID 목록을 생성하는 방법은 node_load_multiple()
무엇입니까? 다른 사용 사례가 있습니까?
Drupal 7에서는 매개 변수를 node_load_multiple()
사용하여 지정 하기위한 API 문서 $conditions
가 사용되지 않기 때문에 사용되지 않습니다 EntityFieldQuery
. 클래스를 사용하여 노드 ID 목록을 생성하는 방법은 node_load_multiple()
무엇입니까? 다른 사용 사례가 있습니까?
답변:
EntityFieldQuery는 후크 세트를 사용하여 Field SQL Storage와 같은 필드 스토리지 모듈과 인터페이스하여 필드 및 기타 노드 특성에 대해 작업합니다. 장기적으로 EntityFieldQuery는 모든 유형의 엔티티를 쿼리하는 훨씬 안정적인 방법이며, 경우에 따라 교차 엔티티 쿼리를 수행 할 수 있습니다 ( field_has_data 또는 _list_values_in_use () 참조 ) .
다음은 EntityFieldQuery를 사용하여 특정 타임 스탬프 전에 게시 된 모든 노드 목록을 가져 오는 간단한 예입니다.
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node', '=')
->propertyCondition('status', 1, '=')
->propertyCondition('created', '1294694496', '<');
$result = $query->execute();
해당 쿼리의 $ results는 다음과 같습니다.
Array
(
[node] => Array
(
[1] => stdClass Object
(
[nid] => 1
[vid] => 49
[type] => article
)
[2] => stdClass Object
(
[nid] => 2
[vid] => 2
[type] => page
)
)
)
그런 다음 해당 배열을 node_load_multiple의 입력으로 사용할 수 있습니다.
$nodes = node_load_multiple(array_keys($result['node']));
Drupal에서에 대한 예제 추가와 관련된 문제를 발견했습니다 EntityFieldQuery
. 나는 더 많은 예제에 대한 전화에 대한 의견을 제시하기 위해 예제로 사용했습니다.
" EntityFieldQuery 예제가 필요합니까? "
주석 # 11 의 쇼 사용량 node_load_multiple()
아래와 같이 :
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'event')
->propertyCondition('status', 1)
->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
->fieldOrderBy('field_date', 'value', 'ASC')
->execute();
$nodes = entity_load('node', array_keys($entities['node']));
return node_view_multiple($nodes, 'teaser');
다음은 테스트 모듈 중 하나의 예입니다.
본문 필드가 "A"로 시작하는 노드를 선택합니다. 반환 된 결과를 사용하는 방법에 대해서는 EntityFieldQuery :: execute () 도 참조하십시오 .
많은 사용 사례가 있으며 일반적인 예는 첫 번째 예에 표시된대로 본문 필드와 같은 특정 필드 값에 대해 엔티티를 조회하는 것입니다.
장점은 사용중인 field_storage에 관계없이 작동한다는 것입니다. 예를 들어 MongoDB에서 필드를 가질 수 있으며 field_data_body를 수동으로 쿼리하지 않으면 EntityQuery가 계속 작동합니다.
당신은 사용할 수 있습니다 EntityFieldQuery의 데이터베이스를 쿼리와 유사 목록의 형태로 결과를 가져 클래스를 node_load_multiple()
.
이것은 클래스를 생성하고 조건을 적용하고 쿼리를 실행하여 달성 할 수 있습니다. 예를 들면 다음과 같습니다.
<?php
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'TYPE') // E.g. node, entityform, taxonomy_term
->entityCondition('bundle', 'BUNDLE')
->fieldCondition('field_foo', 'value', 'STRING')
->range(0,10);
$result = $query->execute();
?>
그러면 다음과 같은 배열이 생성됩니다.
array (
'TYPE' =>
array (
123 =>
stdClass::__set_state(array(
'nid' => '123', // Can be also tid when loading terms.
'key' => 'value',
)),
456 =>
stdClass::__set_state(array(
'nid' => '456',
'key' => 'value',
)),
),
)
결과 배열에서 ID를 가져 오려면 다음을 사용할 수 있습니다 current(current($result))->tid
..
다음은 더 고급 예입니다.
<?php
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', NODE_PUBLISHED)
->fieldCondition('field_news_types', 'value', 'spotlight', '=')
->fieldCondition('field_photo', 'fid', 'NULL', '!=')
->fieldCondition('field_faculty_tag', 'tid', $value)
->fieldCondition('field_news_publishdate', 'value', $year . '%', 'like')
->fieldOrderBy('field_photo', 'fid', 'DESC')
->range(0, 10)
->addMetaData('account', user_load(1)); // Run the query as user 1.
$result = $query->execute();
if (isset($result['node'])) {
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);
}
?>
자세한 설명은 Drupal.org 에서 EntityFieldQuery 사용 방법을 참조하십시오 .