Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 法尔康公司;Volt:添加hasMany()/belongsTo()条件,并计算链接行_Php_Phalcon_Volt - Fatal编程技术网

Php 法尔康公司;Volt:添加hasMany()/belongsTo()条件,并计算链接行

Php 法尔康公司;Volt:添加hasMany()/belongsTo()条件,并计算链接行,php,phalcon,volt,Php,Phalcon,Volt,我的数据库中有两个表,form\u settings和webmaster,它们是一对多关系,这已在它们的模型中定义 FormSettings.php class FormSettings extends \Phalcon\Mvc\Model { public function initialize() { $this->hasMany('db_table', 'webmaster', 'db_table'); } } class FormS

我的数据库中有两个表,
form\u settings
webmaster
,它们是一对多关系,这已在它们的模型中定义

FormSettings.php

class FormSettings extends \Phalcon\Mvc\Model
{    
    public function initialize()
    {
        $this->hasMany('db_table', 'webmaster', 'db_table');
    }
}
class FormSettings extends \Phalcon\Mvc\Model
{    
    public function initialize()
    {
        $this->belongsTo('db_table', 'form_settings', 'db_table');
    }
}
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.php

class FormSettings extends \Phalcon\Mvc\Model
{    
    public function initialize()
    {
        $this->hasMany('db_table', 'webmaster', 'db_table');
    }
}
class FormSettings extends \Phalcon\Mvc\Model
{    
    public function initialize()
    {
        $this->belongsTo('db_table', 'form_settings', 'db_table');
    }
}
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;
    }
}
在我的控制器中,我执行以下
find()
并将其传递给视图:

ControllerBase.php

class FormSettings extends \Phalcon\Mvc\Model
{    
    public function initialize()
    {
        $this->hasMany('db_table', 'webmaster', 'db_table');
    }
}
class FormSettings extends \Phalcon\Mvc\Model
{    
    public function initialize()
    {
        $this->belongsTo('db_table', 'form_settings', 'db_table');
    }
}
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\u id
值:

指数电压

{% 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 %}
{%用于展览中的展览%}
  • {{link_to('index/browse/'~exhibition.db_table,exhibition.db_table)} {展览中的webm为%webmaster%} {{webm.webmaster_id} {%endfor%}
  • {%endfor%}
    我的问题分为三个部分:

  • 我怎样才能将
    webmaster
    中包含列
    extra_1
    的行链接为非
    NULL
  • 如何为每个
    db\u表
    (在
    form\u设置中是唯一的)创建链接的
    webmaster
  • 如何将此信息传递到
    $experiments
    对象中的视图,以便以Volt语法回显
    count()

  • 嘿,首先谢谢你提出的好问题

    请原谅我使用了使用我当前数据库结构的示例。但是您可以轻松地更新代码

    1)您可以为关系定义设置其他参数

    $this->hasMany('id', 'Models\News', 'category_id', [
        'alias' => 'news',
        'reusable' => true, 
        'params' => [
            'order' => 'id DESC',
            'conditions' => 'extra_1 IS NOT NULL',
        ]
    ]);
    
    请注意上面的
    可重用
    。使用它时,每个请求只运行一次查询。考虑到您想要计算记录并对其进行迭代,这是一个很好的性能提升

    2+3)以伏特为单位迭代结果并计数:

    控制器代码:

    $this->view->categories = \Models\NewsCategories::find();
    
    伏特:

    {%用于类别中的类别%}
    {%if category.news | length>0%}//不打印没有文章的类别
    类别{{Category.id}},共有{Category.news | length}篇文章。
    
      {category.news%中的项目的%s}
    • 新闻{{item.id}
    • {%endfor%}
    {%endif%} {%endfor%}
    在我的例子中,上述代码生成以下输出:

    第4类,共4篇文章
    • 新闻#3
    • 新闻#4
    • 新闻#5
    • 新闻#7
    类别#5,共1篇文章
    • 新闻#1


    用于类别中的类别
    用于类别中的项目。新闻
    不,只是不,这将导致大量数据库查询。如果您只需要选择新闻ID,那么使用group_concat使用查询生成器在与类别相同的行中选择它,并以volt正确显示它。这只是一个说明@mpdc问题的示例。他想知道如何将参数传递给模型关系,以及如何以伏特为单位计算项目。没有人说这是最佳实践:)