Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Cakephp 如何防止显示/接收未翻译的内容?_Cakephp_Internationalization_Cakephp 3.0_Query Builder - Fatal编程技术网

Cakephp 如何防止显示/接收未翻译的内容?

Cakephp 如何防止显示/接收未翻译的内容?,cakephp,internationalization,cakephp-3.0,query-builder,Cakephp,Internationalization,Cakephp 3.0,Query Builder,这是我的长途电话 public function display() { $this->loadModel('Distances'); $distances = $this->Distances->find('all',[ 'order' => 'Distances.id ASC', ])->toArray(); $this->set('distances',$distances); }} 问题是,如果内容尚未

这是我的长途电话

public function display()
{
    $this->loadModel('Distances');
    $distances = $this->Distances->find('all',[
        'order' => 'Distances.id ASC',
    ])->toArray();
    $this->set('distances',$distances);
}}
问题是,如果内容尚未翻译并存储在db中,则未翻译的原始内容将显示在页面上

如何防止这种情况,并仅显示当前语言的翻译内容?

仅显示翻译的
选项
遗憾的是,这还没有文档化,但是
Translate
行为支持
onlyTranslated
选项,这将导致只找到那些在当前区域设置中存在翻译的记录

因此,在加载行为时,可以在配置中启用该选项:

$this->addBehavior('Translate', [
      'onlyTranslated' => true,
      // ...
]);
或在飞行中:

$this->Distances->behaviors()->get('Translate')->config('onlyTranslated', true);
但是,这仅在当前区域设置不是默认区域设置时才起作用。ie当您切换区域设置以查看不同语言的内容时,在大多数情况下,这正是您想要和需要的

自定义查询 如果您只想检索存在翻译的记录,而不考虑当前语言环境或翻译的语言环境,则可以选择在翻译表上使用
内部连接的自定义查询

使用
Query::innerJoinWith()
这应该非常简单。这里有一个基本的例子,应该是自我解释的:

$TranslateBehavior = $this->Distances->behaviors()->get('Translate');
$translationTable = $TranslateBehavior->config('translationTable');

$distances = $this->Distances
    ->find()
    ->innerJoinWith($translationTable)
    ->order('Distances.id ASC')
    ->toArray();
另见
仅限翻译的
选项
遗憾的是,这还没有文档化,但是
Translate
行为支持
onlyTranslated
选项,这将导致只找到那些在当前区域设置中存在翻译的记录

因此,在加载行为时,可以在配置中启用该选项:

$this->addBehavior('Translate', [
      'onlyTranslated' => true,
      // ...
]);
或在飞行中:

$this->Distances->behaviors()->get('Translate')->config('onlyTranslated', true);
但是,这仅在当前区域设置不是默认区域设置时才起作用。ie当您切换区域设置以查看不同语言的内容时,在大多数情况下,这正是您想要和需要的

自定义查询 如果您只想检索存在翻译的记录,而不考虑当前语言环境或翻译的语言环境,则可以选择在翻译表上使用
内部连接的自定义查询

使用
Query::innerJoinWith()
这应该非常简单。这里有一个基本的例子,应该是自我解释的:

$TranslateBehavior = $this->Distances->behaviors()->get('Translate');
$translationTable = $TranslateBehavior->config('translationTable');

$distances = $this->Distances
    ->find()
    ->innerJoinWith($translationTable)
    ->order('Distances.id ASC')
    ->toArray();
另见