3

モデルにいくつかの変換動作を作成しようとしました。しかし、どうすれば特定の翻訳を削除できますか。

私の例は、翻訳する必要のある名前を持つカテゴリです。私が英語とスペイン語の翻訳を持っているとしましょう。スペイン語のtranslationshを削除するにはどうすればよいですか?offcouse私は自分のSQLクエリを作成することができましたが、それを行うためのcakephpの方法はありますか。

4

2 に答える 2

2

それを行うためのケーキ機能はありません

ただし、達成するのは簡単です

特定のロケールのすべての翻訳を削除します

特定のロケールのすべての翻訳を削除するには(他の破壊的なアクションと同様に、何かを行う前にデータベースのバックアップを取り、間違いがあった場合や予期しないものが削除された場合に回復できるようにします):

DELETE FROM i18n WHERE locale = 'esp';

もちろん、ロケールは特定のアプリケーションによって異なります。構成を確認するか、dbに問い合わせることができます。

SELECT DISTINCT(locale) FROM i18n; 

特定のロケールとモデルのすべての翻訳を削除します

モデル条件を追加するだけです。

DELETE FROM i18n 
WHERE 
    locale = 'esp' AND 
    model = 'Category'
;

特定のモデルフィールドのすべての翻訳を削除します

操作するレコードのIDを知っている必要があります。次に、次のようにします。

DELETE FROM i18n 
WHERE 
    locale = 'esp' AND 
    model = 'Category' AND 
    foreign_key = 2468789 AND 
    field = 'name'
;

データベースでクエリを直接実行することに自信がない場合は、最初にselectを実行して、削除する内容を確認してください。

SELECT * FROM i18n 
WHERE 
    locale = 'esp' AND 
    model = 'Category' AND 
    foreign_key = 2468789 AND 
    field = 'name'
;

つまり、必要なものを見つけてSELECT、をDELETEステートメントに変更するだけです。

于 2013-03-21T08:30:07.047 に答える
1

驚いたことに、特定のエンティティの翻訳を削除するようなネイティブのCakePHPメソッドはありません。@ AD7sixは明らかに正しいですが、もっと「本ごとの」アプローチを紹介しましょう。

あなたはこのようにsthを行うことができます:

<a href="<?= $this->Url->build(['action' => 'deleteTranslation', 'foreign_key' => 123, 'model' => 'Pluginname.Controller', 'locale' => 'de_DE']); ?>"><?= __('Remove translation'); ?></a>

次に、その機能を利用するメソッドを作成します。

//put this into src/AppController.php to enable that functionality across the whole application

public function deleteTranslation() {
    $this->loadModel('I18n');
    if($this->I18n->deleteAll([
        'locale' => $this->request->getQuery('locale'),
        'model' => $this->request->getQuery('model'),
        'foreign_key' => $this->request->getQuery('foreign_key')
    ])) {
        $this->Flash->success(__('Successfully deleted a translation.'));
    }
    else {
        $this->Flash->error(__('Could not delete a translation.'));
    }
    return $this->redirect($this->referer());
}
于 2018-03-13T08:04:43.400 に答える