A page
has multiple elements and they are linked using the page_to_elements
table. Each element
has multiple element_fields
and are linked using the element_to_element_fields
. Each element_field
has a type and are linked using the element_to_element_fields
table. The values of each element_field
within the element has a value (eitehr in value_char, value_text or value_num) that is stored in the element_values
table.
Below is how the database structure is:
pages:
id|name
elements:
id|name
element_fields_types (sql_type can be char, text or num):
id|name|sql_type
element_fields (names can be title, intro, content, link, number, etc etc):
id:element_field_type_id|name
element_to_element_fields:
id|element_id|element_field_id
page_to_elements:
id|page_id|element_id
element_values:
id|page_id|element_id|page_to_element_id|element_field_id|value_char|value_text|value_num
What I am looking for is a good hasManyToMany
solution to get all values when I request a page id. I now have multiple loops and array creations to get a structure like this (where the values are from the correct column name based on what was set in the element_fields
):
$page = array(
'elements' => array(
[0] => array(
'element_name_here' => array(
'fields' => array(
[0] => array(
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value'
),
[1] => array(
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value'
),
[2] => array(
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value'
),
)
)
),
[1] => array(
'element_name_here' => array(
'fields' => array(
[0] => array(
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value'
),
[1] => array(
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value'
),
[2] => array(
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value',
'field_name_here' => 'Field value'
),
)
)
),
)
);
So I need something like below to produce above array:
$page = Page::find($id);
print_r($page->getValues->toArray());
I have some experience with belongsToMany or hasManyToMany, but never this deep.
Any help would be much appreciated.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire