我的模型中有一个函数,它应该检查我的数据库以查看是否已存在特定的用户名。如果是这样,它应该再次使用递增的值$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" }
所以看起来我的查询也很好。
答案 0 :(得分:0)
我通过将$appendDigit
返回到控制器而不是$username
来解决了问题。然后我可以在控制器中添加一个if / else:
$appendDigit = $this->ums_model->checkIfLoginExists($string, 1);
if ($appendDigit == 1) {
$username = $intranet;
}
else {
$username = $intranet . $appendDigit;
}