Đưa các trường ra khỏi một thực thể được trả về bởi EntityFieldQuery


7

Tôi có một loại nội dung video. Tôi chạy truy vấn sau đây trong hook_cron:

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->entityCondition('bundle', 'video');
$query->propertyCondition('status', 1);
$results = $query->execute();

Lợi nhuận này số đối tượng thực thể với bất động sản nid, vidtype. Tôi muốn sử dụng đối tượng này để tìm giá trị của một trường cụ thể của video (giả sử thời lượng). Tôi không muốn sử dụng node_load, vì tôi đã thực hiện điều đó ngay từ đầu thay vì sử dụng truy vấn. Điều này có thể giải quyết như thế nào?

Câu trả lời:


5

Các EntityFieldQuery tắm Fields mô-đun có thể giải quyết vấn đề của bạn.

Truy vấn, như hiển thị bên dưới, sẽ trả về một đối tượng chứa id thực thể, loại thực thể và một đối tượng có chứa entity_type, entity_id, revision_id, bundle và trường được yêu cầu. Mã của bạn sẽ là:

$query = new EntityFieldQueryExtraFields();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'video')
  ->addExtraField('field_duration', 'value', 'value')
  ->propertyCondition('status', 1);

$results = $query->execute();

Tôi hiện đang sử dụng giải pháp này trên một trang web.


11

Nó không thể - EntityFieldQuerysẽ chỉ tải ID thực thể và các khóa gói.

Không có lựa chọn nào khác ngoài sử dụng node_load_multiple()(hoặc tương đương nếu sử dụng một loại thực thể khác).

$nodes = node_load_multiple(array_keys($results['node']));

Hãy nhớ rằng $conditionstham số của node_load_multiple()bị phản đối; ủng hộ EntityFieldQuerynhư tôi hiểu nó

Về mặt lý thuyết, bạn có thể phân lớp EntityFieldQueryvà ghi đè execute()phương thức để trả về các thực thể được tải đầy đủ - nhưng bạn cũng sẽ cần mở rộng lớp để nó luôn biết loại thực thể mà nó truy vấn; nếu không nó sẽ không biết sử dụng khóa nào $results.


Cảm ơn bạn. Chỉ là một nghi ngờ nhỏ. Tôi đã không nhận được khi bạn nói "lớp con EntityFieldQuery- nhưng bạn cũng sẽ cần mở rộng lớp". Không tạo một lớp con không giống như mở rộng một lớp con? Hay bạn đang đề cập đến một cái gì đó khác mà tôi không hiểu?
AjitS

Xin lỗi, lựa chọn từ ngữ kém. Tôi chỉ có nghĩa là bạn sẽ phải trang bị lớp con của mình để chấp nhận một cách vô điều kiện một đối số loại thực thể, vì nó sẽ được yêu cầu tải các đối tượng thực thể
Clive
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.