【发布时间】:2017-07-08 03:00:21
【问题描述】:
page 有多个元素,它们使用page_to_elements 表链接。每个element 有多个element_fields 并使用element_to_element_fields 链接。每个element_field 都有一个类型并使用element_to_element_fields 表链接。元素内每个element_field 的值都有一个值(在value_char、value_text 或value_num 中的eitehr),存储在element_values 表中。
数据库结构如下:
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
我正在寻找一个很好的hasManyToMany 解决方案,以便在我请求页面 ID 时获取所有值。我现在有多个循环和数组创建来获得这样的结构(其中值来自基于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'
),
)
)
),
)
);
所以我需要类似下面的东西来生成上面的数组:
$page = Page::find($id);
print_r($page->getValues->toArray());
我有一些关于 belongsToMany 或 hasManyToMany 的经验,但从来没有这么深。
任何帮助将不胜感激。
【问题讨论】:
-
您的模型中设置好所有关系了吗?
-
是的。所以 element_fields 与元素等有关系。还设置了数据库关系。只需要从页面一直到值的深层链接
-
@davejal 这可以与多个中间模型一起使用吗?
-
好吧,首先,您的 element_values 表结构错误。确定特定页面上的特定元素 page_to_element_id 就足够了,因此添加“页面”和“元素”字段是错误的。第二。是否所有 3 种类型的元素始终可用于每个页面?在这两种情况下 - 都必须进行更改。
标签: php mysql laravel laravel-5.1