Eloquent是否有能力获取一个字符串字段在字符串const中的行?

时间:2017-10-25 08:57:50

标签: php mysql laravel laravel-5.3

我有一个名为words的表(名为word的列),其中包含一堆禁止/阻止的单词。用户被要求在注册时输入用户名,我们会检查用户选择的用户名中是否有任何禁止/阻止的用户。

我想知道雄辩是否有办法让我进行搜索......

因此,例如,如果单词表在单词列中包含以下条目,则这些单词不能在用户名中...

  • 啁啾
  • DERP

因此,如果选择的用户名是" tychirply",它应该被拒绝,因为它有啁啾声。

我想,通过返回字符串常量中存在的任何行,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;
    }
}

1 个答案:

答案 0 :(得分: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.';
    }
}