PodsAPI::lookup_related_items PHP Method

    public function lookup_related_items($field_id, $pod_id, $ids, $field = null, $pod = null)
    {
        $related_ids = array();
        if (!is_array($ids)) {
            $ids = explode(',', $ids);
        }
        foreach ($ids as $k => $id) {
            $ids[$k] = (int) $id;
        }
        $ids = array_unique(array_filter($ids));
        $idstring = implode(',', $ids);
        if (0 != $pod_id && 0 != $field_id && isset(self::$related_item_cache[$pod_id][$field_id][$idstring])) {
            // Check cache first, no point in running the same query multiple times
            return self::$related_item_cache[$pod_id][$field_id][$idstring];
        }
        $tableless_field_types = PodsForm::tableless_field_types();
        $field_type = pods_v('type', $field);
        if (empty($ids) || !in_array($field_type, $tableless_field_types)) {
            return array();
        }
        $related_pick_limit = 0;
        if (empty($field)) {
            $field = $this->load_field(array('id' => $field_id));
        }
        if (!empty($field)) {
            $options = (array) pods_var_raw('options', $field, $field, null, true);
            $related_pick_limit = (int) pods_v($field_type . '_limit', $options, 0);
            if ('single' == pods_var_raw($field_type . '_format_type', $options)) {
                $related_pick_limit = 1;
            }
            // Temporary hack until there's some better handling here
            $related_pick_limit = $related_pick_limit * count($ids);
        }
        if ('taxonomy' == $field_type) {
            $related = wp_get_object_terms($ids, pods_v('name', $field), array('fields' => 'ids'));
            if (!is_wp_error($related)) {
                $related_ids = $related;
            }
        } elseif (!pods_tableless()) {
            $ids = implode(', ', $ids);
            $field_id = (int) $field_id;
            $sister_id = (int) pods_var_raw('sister_id', $field, 0);
            $related_where = "\n                `field_id` = {$field_id}\n                AND `item_id` IN ( {$ids} )\n            ";
            $sql = "\n                SELECT item_id, related_item_id, related_field_id\n                FROM `@wp_podsrel`\n                WHERE\n                    {$related_where}\n                ORDER BY `weight`\n            ";
            $relationships = pods_query($sql);
            if (!empty($relationships)) {
                foreach ($relationships as $relation) {
                    if (!in_array($relation->related_item_id, $related_ids)) {
                        $related_ids[] = (int) $relation->related_item_id;
                    } elseif (0 < $sister_id && $field_id == $relation->related_field_id && !in_array($relation->item_id, $related_ids)) {
                        $related_ids[] = (int) $relation->item_id;
                    }
                }
            }
        } else {
            if (!is_array($pod)) {
                $pod = $this->load_pod(array('id' => $pod_id, 'table_info' => false), false);
            }
            if (!empty($pod) && in_array($pod['type'], array('post_type', 'media', 'taxonomy', 'user', 'comment', 'settings'))) {
                $meta_type = $pod['type'];
                if (in_array($meta_type, array('post_type', 'media'))) {
                    $meta_type = 'post';
                } elseif ('taxonomy' == $meta_type) {
                    $meta_type = 'term';
                }
                $no_conflict = pods_no_conflict_check('term' == $meta_type ? 'taxonomy' : $meta_type);
                if (!$no_conflict) {
                    pods_no_conflict_on('term' == $meta_type ? 'taxonomy' : $meta_type);
                }
                foreach ($ids as $id) {
                    if ('settings' == $meta_type) {
                        $related_id = get_option('_pods_' . $pod['name'] . '_' . $field['name']);
                        if (empty($related_id)) {
                            $related_id = get_option($pod['name'] . '_' . $field['name']);
                        }
                        if (is_array($related_id) && !empty($related_id)) {
                            foreach ($related_id as $related) {
                                if (is_array($related) && !empty($related)) {
                                    if (isset($related['id'])) {
                                        $related_ids[] = (int) $related['id'];
                                    } else {
                                        foreach ($related as $r) {
                                            $related_ids[] = (int) $r;
                                        }
                                    }
                                } else {
                                    $related_ids[] = (int) $related;
                                }
                            }
                        }
                    } else {
                        $related_id = get_metadata($meta_type, $id, '_pods_' . $field['name'], true);
                        if (empty($related_id)) {
                            $related_id = get_metadata($meta_type, $id, $field['name']);
                        }
                        if (is_array($related_id) && !empty($related_id)) {
                            foreach ($related_id as $related) {
                                if (is_array($related) && !empty($related)) {
                                    if (isset($related['id'])) {
                                        $related_ids[] = (int) $related['id'];
                                    } else {
                                        foreach ($related as $r) {
                                            if (isset($related['id'])) {
                                                $related_ids[] = (int) $r['id'];
                                            } else {
                                                $related_ids[] = (int) $r;
                                            }
                                        }
                                    }
                                } else {
                                    $related_ids[] = (int) $related;
                                }
                            }
                        }
                    }
                }
                if (!$no_conflict) {
                    pods_no_conflict_off('term' == $meta_type ? 'taxonomy' : $meta_type);
                }
            }
        }
        if (is_array($related_ids)) {
            $related_ids = array_unique(array_filter($related_ids));
            if (0 < $related_pick_limit && !empty($related_ids)) {
                $related_ids = array_slice($related_ids, 0, $related_pick_limit);
            }
        }
        if (0 != $pod_id && 0 != $field_id && !empty($related_ids)) {
            // Only cache if $pod_id and $field_id were passed
            self::$related_item_cache[$pod_id][$field_id][$idstring] = $related_ids;
        }
        return $related_ids;
    }

Usage Example

 /**
  * Delete the value from the DB
  *
  * @param int $id
  * @param string $name
  * @param array $options
  * @param array $pod
  *
  * @since 2.3
  */
 public function delete($id = null, $name = null, $options = null, $pod = null)
 {
     if (empty(self::$api)) {
         self::$api = pods_api();
     }
     $simple_tableless_objects = $this->simple_objects();
     // Bidirectional relationship requirement checks
     $related_object = pods_var(self::$type . '_object', $options, '');
     // pod, post_type, taxonomy, etc..
     $related_val = pods_var(self::$type . '_val', $options, $related_object, null, true);
     // pod name, post type name, taxonomy name, etc..
     $related_sister_id = (int) pods_var('sister_id', $options, 0);
     if (!empty($related_sister_id) && !in_array($related_object, $simple_tableless_objects)) {
         $related_pod = self::$api->load_pod(array('name' => $related_val, 'table_info' => false), false);
         if (false !== $related_pod && ('pod' == $related_object || $related_object == $related_pod['type'])) {
             $related_field = false;
             // Ensure sister_id exists on related Pod
             foreach ($related_pod['fields'] as $related_pod_field) {
                 if ('pick' == $related_pod_field['type'] && $related_sister_id == $related_pod_field['id']) {
                     $related_field = $related_pod_field;
                     break;
                 }
             }
             if (!empty($related_field)) {
                 $values = self::$api->lookup_related_items($options['id'], $pod['id'], $id, $options, $pod);
                 if (!empty($values)) {
                     $no_conflict = pods_no_conflict_check($related_pod['type']);
                     if (!$no_conflict) {
                         pods_no_conflict_on($related_pod['type']);
                     }
                     self::$api->delete_relationships($values, $id, $related_pod, $related_field);
                     if (!$no_conflict) {
                         pods_no_conflict_off($related_pod['type']);
                     }
                 }
             }
         }
     }
 }
All Usage Examples Of PodsAPI::lookup_related_items