CI3(Twig)查询结果数组为空

时间:2018-02-21 13:12:09

标签: php codeigniter twig codeigniter-3

我正在使用CodeIgniter 3和Twig制作语言系统。我将短语存储在我的数据库中,其中包含keywordvaluelanguage字段。我从数据库中获取语言数据的代码如下:

$query = $this->db->select("*")
    ->get("phrases")
    ->result_array();

$this->twig->addGlobal("phrase", $query);

如果我var_export($query)它会返回:

array ( 0 => array ( 'id' => '31', 'keyword' => 'hello_world', 'value' => 'Hello World', 'language' => 'english', ), 1 => array ( 'id' => '35', 'keyword' => 'beautiful_weather', 'value' => 'It\'s a beautiful weather today', 'language' => 'english', ), 2 => array ( 'id' => '36', 'keyword' => 'goodbye', 'value' => 'Goodbye!', 'language' => 'english', ), 3 => array ( 'id' => '37', 'keyword' => 'test', 'value' => 'Test123', 'language' => 'english', ), )

我想要实现的是通过使用与上面的数组相关联的关键字将短语打印到我的树枝模板中。这意味着我将以下行打印到任何Twig模板文件中:

{{ phrase.hello_world }}

...它应该从我的语言表中自动打印字段hello_world的值。

我自己尝试了一些并试图做以下事情......

foreach($query as $result)
{
    $this->twig->addGlobal("phrase." . $result->keyword, $result->value);
}

但由于树枝认为变量旁边的.表示从数组中读取,因此它不起作用。如果我将符号更改为例如_它可以工作,但在模板代码中看起来很混乱(因为数据库中的关键字也使用_而其他一切看起来真的很难看,所以我真的需要使用.

旁注:我不想在树枝模板文件中使用foreach循环。

1 个答案:

答案 0 :(得分:3)

您不需要->select("*")。来自CodeIgniter docs

  

$this->db->select()

     

...

     

如果从表中选择全部(*),则不需要使用此功能。省略时,CodeIgniter假定您希望选择所有字段并自动添加“SELECT *”。

所以你可以做到这一点:

$query = $this->db->get("phrases")->result_array();

顺便说一句,我认为,例如$phrases将是一个更好的变量名称。

Another doc page描述了result_array()方法:

  

此方法将查询结果作为纯数组返回,或者在未生成结果时返回空数组。通常,您将在foreach循环中使用它。

因此,$query是一个数组,所以你需要在Twig中循环它。数组不为空,您甚至将其内容发布到您的问题中。为了便于阅读,我将内容扩展到多行:

[
    0 => [
        'id' => '31',
        'keyword' => 'hello_world',
        'value' => 'Hello World',
        'language' => 'english'
    ],
    1 => [
        'id' => '35',
        'keyword' => 'beautiful_weather',
        'value' => 'It\'s a beautiful weather today',
        'language' => 'english'
    ],
    2 => [
        'id' => '36',
        'keyword' => 'goodbye',
        'value' => 'Goodbye!',
        'language' => 'english'
    ],
    3 => [
        'id' => '37',
        'keyword' => 'test',
        'value' => 'Test123',
        'language' => 'english'
    ]
]

因此,您有四个项目,每个项目都有idkeywordvaluelanguage个键。您可以在Twig中遍历数组,例如像这样:

{% for item in query %}
    ID is {{ item.id }}
    Keyword is {{ item.keyword }}
    Value is {{ item.value }}
    Language is {{ item.language }}

{% endfor %}

输出:

ID is 31
Keyword is hello_world
Value is Hello World
Language is english

ID is 35
Keyword is beautiful_weather
Value is It's a beautiful weather today
Language is english

ID is 36
Keyword is goodbye
Value is Goodbye!
Language is english

ID is 37
Keyword is test
Value is Test123
Language is english

编辑:

您可以在PHP中执行foreach循环:

$phrase = [];

foreach ($query as $result) {
    $phrase[$result->keyword] = $result->value;
}

$this->twig->addGlobal("phrase", $phrase);

然后在Twig:

{{ phrase.hello_world }}
{{ phrase.beautiful_weather }}
{{ phrase.goodbye }}
{{ phrase.test }}