2017-10-25 9 views
0

私は単語と呼ばれるテーブルを持っています(単語という名前の列)。その中に禁止/ブロックされた単語がたくさんあります。ユーザーは登録時にユーザー名を入力するよう求められ、禁止された/ブロックされた単語がユーザーが選択したユーザー名に含まれているかどうかが確認されます。Eloquentは1つの文字列フィールドが文字列const内にある行を取得できますか?

雄弁は、私は、この検索を行うための方法を持っている場合、私は言葉のテーブルには、単語列に次のエントリを持っている場合、これらの言葉は、ユーザー名にすることはできません例えばそう...

を思ったんだけど...

  • チャープ
  • DERP

ので、ユーザ名が選ばれた場合それはそれにチャープがあるので拒絶されるべきです。

私はeloquentが文字列定数にある行を返すことでこれを行う方法があると思います。そうでないと、すべての単語をプルしてPHPでチェックする必要があります。

私はlaravel 5.3を実行している、これは今....

$search_words = Words::where('is_badname', true)->get(); 
foreach($search_words as $search_word) 
{ 
    if (strpos($word, $search_word->word) !== false) 
    { 
     return true; 
    } 
} 

答えて

0

私はそれを行う方法、それはのようなものかもしれない。このhttps://laravel.com/docs/5.5/validation#custom-validation-rulesに応じて、独自の検証規則を作成することです最善の方法であります:

<?php 

namespace App\Rules; 

use Illuminate\Contracts\Validation\Rule; 
use App\Words; 

class BannedWords implements Rule 
{ 
    /** 
    * Determine if the validation rule passes. 
    * 
    * @param string $attribute 
    * @param mixed $value 
    * @return bool 
    */ 
    public function passes($attribute, $value) 
    { 
     $words = Words::where('is_badname', true)->get(); 
     return (strpos($word, $words->toArray()) !== false); 
    } 

    /** 
    * Get the validation error message. 
    * 
    * @return string 
    */ 
    public function message() 
    { 
     return 'This word is forbidden.'; 
    } 
} 
関連する問題