Điều kiện ngày truy vấn thực thể Drupal 8

Nếu bạn viết các mô-đun Drupal 8 (hoặc 9) tùy chỉnh, thì có thể bạn đã sử dụng thực thể QueryInterface - có thể truy cập được từ Drupal. phương thức tĩnh entityQuery(). Nếu không, thì bạn đang bỏ lỡ công cụ cực kỳ hữu ích này cho phép bạn dễ dàng truy vấn một trang web Drupal cho bất kỳ loại thực thể nào.  

Ví dụ: nếu bạn đang tìm kiếm tất cả các nút thuộc loại Phim có Năm phát hành là 2009, thì bạn có thể thực hiện như sau

$result = \Drupal::entityQuery('node')
  ->condition('type', 'movie')
  ->condition('field_release_year', '2009')
  ->execute();

Nhưng nếu bạn muốn đặt điều kiện dựa trên giá trị của một thực thể được tham chiếu thì sao? . Việc viết một điều kiện truy vấn thực thể cho tình huống này cũng gần như dễ dàng

$result = \Drupal::entityQuery('node')
 ->condition('type', 'movie')
 ->condition('field_director.entity:node.field_birth_year', '1981')
 ->execute();

Lưu ý thực thể. bit nút trong điều kiện thứ hai - đây là thứ cho phép bạn truy cập các trường trong thực thể được tham chiếu

Bình luận

Mẹo tuyệt vời, cảm ơn rất nhiều. Tôi chắc chắn sẽ sử dụng cái này

Đăng bởi david. qdoscc (chưa được xác minh) vào Thứ 5, 09/07/2020 - 06. 34

Điều đó thật ngầu
Có cách nào để lấy giá trị cho trường tham chiếu ngược theo cách tương tự không?

Đăng bởi Tim C (chưa được xác minh) vào Thứ 5, 09/07/2020 - 07. 25

nhận xét của tác giả

Tim - đó là một câu hỏi hay mà tôi không có câu trả lời. Tôi nghi ngờ câu trả lời là "không", nhưng tôi không có bất kỳ bằng chứng chắc chắn nào để chứng minh điều đó


    $query = \Drupal::entityQuery('entity_name');
    //field value condition check
    $query->condition('financial_status','accept');
    //field value array condition check
    $query->condition('financial_payment_status',['completed'],'IN');
    //condition with date format (d/m/y)
    if($params['start-date']){
      $befordate = $params['start-date'].' 23:59:59';
      $query->condition('changed',strtotime($befordate),'>=');
    }
    if($params['end-date']){
      $enddate = $params['end-date'].' 23:59:59';
      $query->condition('changed',strtotime($enddate),'<='); 
    }
    //search condition with name
    if($search)
       $query->condition('name', "%" . $search . "%", 'LIKE');
    //Or Conditon check with name or user name searching
    if($matter_search){
      $group = $query->orConditionGroup()
       ->condition('chat_matter_Id.entity.name', "%" . $matter_search . "%", 'LIKE')
       ->condition('chat_matter_Id.entity.user_id.entity.field_first_name', "%" . $matter_search . "%", 'LIKE');
      $query->condition($group);
    }
    //condition not equal a value
    $query->condition('financial_type','fees','!=');
    //today created items filter
    $query->condition('created', array(strtotime('today'), strtotime('today 23:59:59')), 'BETWEEN');
    //condition for item status is published
    $query->condition('status', 1);
    //sort list by created time
    $query->sort('created', 'DESC');
    //result range for pager
    if($offset && $limit){
     $start_limit = ($offset - 1) * $limit;
     $query->range($start_limit, $limit);
    }
    $entity_ids = $query->execute();
    if (!empty($entity_ids)) {
      $Entity = \Drupal::entityTypeManager()->getStorage('entity_name')->loadMultiple($entity_ids);
      foreach ($Entity as $node) {
        $data = [];
        $data['matter_id'] = $node->financial_matter_Id->entity->id->value;
        
        $payments[] = $data;
      }
    }

 

Quảng cáo

Chia sẻ cái này

  • Twitter
  • Facebook
  • WhatsApp
  • E-mail
  • LinkedIn
  • Ứng dụng trò chuyện

Như thế này

Thích Đang tải.

Có liên quan

CHÀO,
làm cách nào tôi có thể viết truy vấn này trong Drupal 8?
"CHỌN * TỪ mytable WHERE NGÀY(startdate)=CURDATE()"

Đây không phải là làm việc

$query = db_select('mytable', 't')
->fields('t')
->condition('DATE(startdate)=CURDATE()');
->execute()
->fetchAssoc();
return array();

Vẫn có thể viết truy vấn dưới dạng chuỗi và khởi chạy nó mà không cần db_select?

Cảm ơn

Claudio

CHÀO,

Tôi đang sử dụng thành công mô-đun này trong một dự án và nó thật tuyệt
Tuy nhiên, bây giờ tôi muốn tạo một truy vấn thực thể chọn tất cả các nút có ngày của trường ngày thông minh trong tương lai

Đây không phải là làm việc

$now = new DrupalDateTime('now');
$now->setTimezone(new \DateTimeZone(DATETIME_STORAGE_TIMEZONE));
  
$query = \Drupal::entityQuery('node')
  ->condition('type', 'mynodetype')
  ->condition('field_smart_date', $now->format(DATETIME_DATETIME_STORAGE_FORMAT), '>=')
  ->sort('field_smart_date', 'ASC');
  $nids = $query->execute();

Điều này vẫn hiển thị các nút có field_smart_date trong quá khứ