我的数据库form_settings
和webmaster
中有两个表,它们是一对多关系,并且已在其模型中定义。
FormSettings.php
class FormSettings extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->hasMany('db_table', 'webmaster', 'db_table');
}
}
Webmaster.php
class FormSettings extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->belongsTo('db_table', 'form_settings', 'db_table');
}
}
在我的Controller中,我执行以下find()
并将其传递给视图:
ControllerBase.php
class ControllerBase extends Controller
{
public function initialize()
{
$exhibitions = FormSettings::find(
array(
'form_type = "v" AND show_end_date > NOW() AND archived = "n"',
'order' => 'db_table'
)
);
$this->view->exhibitions = $exhibitions;
}
}
我知道它正确地链接了我的webmaster
表格中的行,因为我在视图中有以下代码,并显示webmaster_id
值:
index.volt
{% for exhibition in exhibitions %}
<li>
{{ link_to('index/browse/' ~ exhibition.db_table, exhibition.db_table) }}
<!-- testing below -->
{% for webm in exhibition.webmaster %}
{{ webm.webmaster_id }}
{% endfor %}
<!-- end testing -->
</li>
{% endfor %}
我的问题分为三部分:
webmaster
列extra_1
而不是NULL
?count()
每个webmaster
的{{1}}行(db_table
中的唯一行)?form_settings
对象中的视图,以便我可以用Volt语法回显$exhibitions
?答案 0 :(得分:1)
嘿,首先感谢格式化的好问题。
请原谅我使用当前数据库结构的示例。但您可以轻松更新代码。
1)您可以为关系定义设置其他参数。
$this->hasMany('id', 'Models\News', 'category_id', [
'alias' => 'news',
'reusable' => true,
'params' => [
'order' => 'id DESC',
'conditions' => 'extra_1 IS NOT NULL',
]
]);
请注意上面的reusable
。使用它时,查询每个请求只运行一次。考虑到你想要计算记录并迭代它们,它会带来很好的性能提升。
2 + 3)迭代结果伏特和计数:
控制器代码:
$this->view->categories = \Models\NewsCategories::find();
伏:
{% for category in categories %}
{% if category.news|length > 0 %} // Do not print categories without articles
<h3>Category #{{ category.id }} with total of {{ category.news|length }} articles.</h3>
<ul>
{% for item in category.news %}
<li>News #{{ item.id }}</li>
{% endfor %}
</ul>
{% endif %}
{% endfor %}
我的上述代码产生以下输出:
类别#4共有4篇文章。
- 新闻#3
- 新闻#4
- 新闻#5
- 新闻#7
类别#5共有1篇文章。
- 新闻#1