0

这是我尝试做的。我有一个具有以下结构的表,它应该在任何其他表中保存其他数据的翻译值

Translations
| Language id | translation | record_id | column_name | table_name |
====================================================================
| 1           | Hello       | 1         | test_column | test_table | 
| 2           | Aloha       | 1         | test_column | test_table |
| 1           | Test input  | 2         | test_column | test_table |

在我的视图中使用的代码中,我有一个查找该表的函数,并以用户的语言返回字符串。如果该字符串没有翻译成他的语言,该函数将返回应用程序默认的字符串(比如说 with ID = 1

它工作正常,但我必须通过大约 600 个视图文件来应用它......我想知道是否可以在$this->db->get()原始记录之前在我的 CodeIgniter 模型中注入一些 SQL,将原始列替换为翻译了一个。

像这样的东西:

$this->db->select('column_name, col_2, col_3');
// Injected SQL pseudocode:
// If RECORD EXISTS in table Translations where Language_id = 2 and record_id = 2 AND column_name = test_column AND table_name = test_table
// BEGIN
//     SELECT translations.translation as column_name
//     WHERE translations.table_name = test_table AND column_name = test_column AND record_id = 2
// END
// ELSE
// BEGIN
//     SELECT translations.translation as column_name
//     WHERE translations.table_name = test_table AND column_name = test_column AND record_id = 1
// END

$this->db->get('test_table');

这有可能以某种方式完成吗?

4

1 回答 1

0

你所要求的并没有真正的意义。您只需先进行不同的查询,然后根据结果更改第二个查询,即可“注入”。

另一种选择(也许更好)是在存储过程中完成所有这些,但它本质上仍然相同,只是连接更少并且处理速度更快

于 2013-10-25T07:45:42.473 回答