json icon indicating copy to clipboard operation
json copied to clipboard

add relationships support for grids

Open ahebrank opened this issue 7 years ago • 2 comments

Relationship fields within grids aren't followed down the rabbit hole to fetch the child_id out of the separate relationship table. This adds that relationship lookup (with caching like the existing lookups).

ahebrank avatar Oct 05 '18 19:10 ahebrank

Fixed some bugs:

  • This doesn't work when multiple grid fields with a relationships column exist in the channel entry. Only the first grid field will get relationships returned. Took out lines 513, 514 and 537 to fix this.

  • Lines 523 - 526 are duplicated on lines 528 - 531. Removed duplicate lines 528 - 531

protected function entries_grid_relationship($grid_col_id, $grid_row_id, $entry_id)
{
  $query = ee()->db->select('parent_id, child_id, grid_field_id, grid_col_id, grid_row_id, field_id, fluid_field_data_id')
                   ->where_in('parent_id', $this->entries_entry_ids)
                   ->where('grid_col_id', $grid_col_id)
                   ->order_by('order', 'asc')
                   ->get('relationships');

  foreach ($query->result_array() as $row)
  {
    if ( ! isset($this->entries_grid_relationship_data[$grid_col_id][$row['parent_id']][$row['grid_row_id']]))
    {
      $this->entries_grid_relationship_data[$grid_col_id][$row['parent_id']][$row['grid_row_id']] = array();
    }

    $this->entries_grid_relationship_data[$grid_col_id][$row['parent_id']][$row['grid_row_id']][] = (int) $row['child_id'];
  }

  $query->free_result();

  if (isset($this->entries_grid_relationship_data[$grid_col_id][$entry_id][$grid_row_id]))
  {
    return $this->entries_grid_relationship_data[$grid_col_id][$entry_id][$grid_row_id];
  }

  return array();
}

Zignature avatar Nov 26 '21 10:11 Zignature

Fixed some bugs:

  • This doesn't work when multiple grid fields with a relationships column exist in the channel entry. Only the first grid field will get relationships returned. Took out lines 513, 514 and 537 to fix this.
  • Lines 523 - 526 are duplicated on lines 528 - 531. Removed duplicate lines 528 - 531
protected function entries_grid_relationship($grid_col_id, $grid_row_id, $entry_id)
{
  $query = ee()->db->select('parent_id, child_id, grid_field_id, grid_col_id, grid_row_id, field_id, fluid_field_data_id')
                   ->where_in('parent_id', $this->entries_entry_ids)
                   ->where('grid_col_id', $grid_col_id)
                   ->order_by('order', 'asc')
                   ->get('relationships');

  foreach ($query->result_array() as $row)
  {
    if ( ! isset($this->entries_grid_relationship_data[$grid_col_id][$row['parent_id']][$row['grid_row_id']]))
    {
      $this->entries_grid_relationship_data[$grid_col_id][$row['parent_id']][$row['grid_row_id']] = array();
    }

    $this->entries_grid_relationship_data[$grid_col_id][$row['parent_id']][$row['grid_row_id']][] = (int) $row['child_id'];
  }

  $query->free_result();

  if (isset($this->entries_grid_relationship_data[$grid_col_id][$entry_id][$grid_row_id]))
  {
    return $this->entries_grid_relationship_data[$grid_col_id][$entry_id][$grid_row_id];
  }

  return array();
}

This doesn't seem to work either... :(

Zignature avatar Nov 27 '21 12:11 Zignature