使用Codeigniter的多语言数据库

时间:2015-07-07 09:36:31

标签: php mysql codeigniter

我在数据库设计中应用了附加翻译方法方法。

relationship

使用这种表结构,每个查询的代码变得更加复杂。

我在模型中的PHP代码

<?php
// SHOW ALL RECORDS
$this->db->select('m.id, m.title, m.content');

$table = 'blog';
if (MULTILINGUAL) {
    $this->db->from($table.' AS m');

    $this->db->select('t.title, t.content');
    $this->db->join($table.'_translation AS t', 'm.id = t.parent_id', 'left');
    $this->db->where('t.language_id', LANGUAGE);

    $query = $this->db->get();
} else $query = $this->db->get($table.' AS m');
?>

所以我想改变它的代码......

MULTILINGUAL 为真时,每个查询的列字段为titlecontent,...

$table = 'blog';
$this->db->select('id, title, content');
$query = $this->db->get($table);

它会自动使用方法 JOIN ,表格后缀为_translation(如上面的代码所示)。

否则,查询应该作为普通查询运行。

如何修改db类,但不影响Codeigniter的核心系统?

PHP代码(使用Codeigniter):

// Query 1:
$this->db->select('id, title, content');
$query = $this->db->get('blog');

// Query 2:
$this->db->select('id, title, content');
$this->db->where('id', 1);
$query = $this->db->get('blog');

制作$this->db->last_query()

if (MULTILINGUAL) {
    // Query 1:
    // SELECT t.title, t.content FROM blog AS m LEFT JOIN blog_translation AS t ON m.id = t.parent_id WHERE t.language_id = 1

    // Query 2:
    // SELECT t.title, t.content FROM blog AS m LEFT JOIN blog_translation AS t ON m.id = t.parent_id WHERE t.language_id = 1 WHERE m.id = 1
else {
    // Query 1:
    // SELECT title, content FROM blog

    // Query 2:
    // SELECT title, content FROM blog WHERE id = 1
}

我希望它完全自动化。

我认为可以改变db类来解决这个问题,但直接干预核心系统是不稳定的(在核心更新中)......

我真的很感谢你帮我解决问题!

2 个答案:

答案 0 :(得分:1)

这可能有助于您解决我不知道您如何使用该配置文件但可以实现该功能

function your_function($multilingual = false) {
    $table = 'blog';
    if ($multilingual === true) {
        $this->db->select('t.title, t.content');
        $this->db->join($table . '_translation AS t', 'm.id = t.parent_id', 'left');
        $this->db->where('t.language_id', LANGUAGE);
        $query = $this->db->get($table . ' AS m')->result_array();
    } else {
        $this->db->select('m.id, m.title, m.content');
        $query = $this->db->get($table . ' AS m')->result_array();
    }
    return $query;
}

答案 1 :(得分:0)

您可以创建一个视图,然后致电:$this->db->where('t.language_id', LANGUAGE);,但我不知道这是否是一个更好的解决方案。