Codeigniter - 如果查询返回某些内容,请执行某些操作

时间:2016-03-01 15:19:50

标签: php codeigniter

我的模型中有一个函数,它应该检查我的数据库以查看是否已存在特定的用户名。如果是这样,它应该再次使用递增的值$appendDigit调用自身(然后将其添加到$string的末尾并再次检查)。否则,它应该将原始$string作为$username返回。

控制器

$string = strtolower($value['first_name']) . '_' . strtolower($value['last_name']);
$username = $this->ums_model->checkIfLoginExists($string, 1);

模型

public function checkIfLoginExists($string, $appendDigit)
{
    // When first called, appendDigit will be equal to 1. 
    // If the username already exists the method will call itself, 
    // incrementing the appendDigit until it finds an unused username

    if ($appendDigit != 1) {
        $username = $string . $appendDigit;
    } 
    else {
        $username = $string;
    }

    $this->db   ->select('username')
                ->from('users')
                ->where('username', $username);

    $result = $this->db->get()->row_array();

    if (!empty($result)) {

        $appendDigit++;
        $this->checkIfLoginExists($string, $appendDigit);

    }

    return $username;

}

这适用于唯一的用户名,但如果用户名已经存在则不行(我得到重复的条目数据库错误)。所以我认为if (!empty... )语句不能正常工作。我已尝试使用result_array()row()result()进行各种变体...但似乎没有任何效果。

我认为我可能需要将return放入else块中,但是当我这样做时,无论如何都会返回NULL

我在这里缺少什么?

更新:当我执行var_dump($result)时,会返回

array(1) { ["username"]=> string(11) "original_string" }

所以看起来我的查询也很好。

1 个答案:

答案 0 :(得分:0)

我通过将$appendDigit返回到控制器而不是$username来解决了问题。然后我可以在控制器中添加一个if / else:

$appendDigit = $this->ums_model->checkIfLoginExists($string, 1);

if ($appendDigit == 1) {
    $username = $intranet;
}
else {
    $username = $intranet . $appendDigit;
}