我正在写一个简单的应用程序。我需要阻止用户从一个页面,如果他们的信用是< 0
我有一个“User_profiles”表,带有“信用”行。
如果“credit”的值为0,如何与控制器一起设置模型以将用户发送到另一页?
这应该是直截了当的,但我是select->的新手......
它也必须是当前用户的行 - 我不知道如何很好地遍历数组。
谢谢!
答案 0 :(得分:4)
嗯,最简单的解决方案是加载不同的视图......
至于模型,它看起来像这样:
class UserModel extends Model {
public function getUserCredit($id) {
$this->load->database();
//effectively generates: SELECT `credit` FROM `User_profiles` WHERE `id`=$id
$query = this->db->select('credit')->where('id',$id)->get('User_profiles');
//row() executes the query for a single result, returns the credit property
return $query->row()->credit;
}
}
然后在控制器中:
class Users extends Controller {
//....
public function credit() {
$this->load->model('userModel','users');
// assuming the session library has been loaded
$user_id = $this->session->userdata('id');
$credit = $this->users->getUserCredit($user_id);
if ($credit == '0') $this->load->view('users/no_credit');
else $this->load->view('users/credit');
}
}
这是未经测试的,但它至少可以帮助你理解。
当您请求页面/users/credit/1
时,CI将调用Users::credit(1)
操作。
然后将UserModel
加载为$this->users
您致电$this->users->getUserCredit(1)
,转换为UserModel::getUserCredit(1)
,以$credit
模型加载数据库。
您告诉数据库select('credit')
(选择credit
列),where('id',1)
(id = 1
),然后get('User_profiles')
(获取匹配User_profiles
表中的行。这将返回一个查询,为了便于阅读,您将其存储为$query
。
getUserCredit
返回查询的单行结果的credit属性
如果$credit == 0
,您加载视图views/users/no_credit.php
否则,您加载视图views/users/credit.php
(在他们所代表的操作之后命名视图并将它们放在与控制器对应的文件夹中是常规的)