Yii2 ActiveRecord按可翻译字段排序


Yii2 ActiveRecord sorting by translatable field

我的数据库中有一个表,其中有一个name字段,我想翻译其中的内容。我正在使用lajax/翻译管理器,它运行得很好。当我想按name对GridView(或其他小部件)中的数据进行排序时,问题就来了。当我查询数据库时,我指定name作为排序字段,但它是用存储的语言(英语)完成的。然后,我使用GridView列中的Yii::t()函数来输出字段,并对其进行翻译,但显然顺序保持不变。

例如,在表专业中,我有一行的name取值Accounting,在西班牙语中为Contabilidad。如果我用西班牙语显示表格,那一行应该显示在下面,而不是用英语显示,但这并没有发生。

解决方案:我最终以数组的形式从数据库中获取所有记录,用Yii::t翻译它们,然后将其放入ArrayDataProvider中。还有一件事:为了允许过滤,我还必须使用PHP的函数fnmatch检查数组的对应列。

您想要在mysql请求中动态翻译Accounting。这不是工作。

你有两种方法:

  • 在表中创建字段name_spanish,并在mysql中根据该字段进行排序
  • 获取所有记录,通过Yii::t()转换值,并在php中进行排序