再会。:) 我是 cakePHP 新手,所以请多多包涵。
我有一个模范学生。学生有一个属性状态,它是一个整数。我想根据学生身份创建虚拟字段。
例子:
Status VirtualField
1 new student
2 new student - transferee
3 old student - shiftee
4 old student
任何帮助将不胜感激。谢谢。
再会。:) 我是 cakePHP 新手,所以请多多包涵。
我有一个模范学生。学生有一个属性状态,它是一个整数。我想根据学生身份创建虚拟字段。
例子:
Status VirtualField
1 new student
2 new student - transferee
3 old student - shiftee
4 old student
任何帮助将不胜感激。谢谢。
你没有指定你正在使用什么 RDMS,我假设 MySQL
如果你想拥有这个基于固定字符串的 virtualField ,你可以通过CASE
MySQL 中的 a 来实现,并使用它来定义 virtualField
$this->MyModel->virtualFields['status_title'] = "
CASE
WHEN status = 1 THEN 'new student'
WHEN status = 2 THEN 'new student - transferee'
WHEN status = 3 THEN 'old student - shiftee'
WHEN status = 4 THEN 'old student'
ELSE 'unkown status'
END
";
或者,在模型本身内部定义它;
class Student extends AppModel {
public $virtualFields = array(
'status_title' => "
CASE
WHEN status = 1 THEN 'new student'
WHEN status = 2 THEN 'new student - transferee'
WHEN status = 3 THEN 'old student - shiftee'
WHEN status = 4 THEN 'old student'
ELSE 'unkown status'
END
",
);
}
在我的回答中,我假设您正在尝试使用固定字符串作为标题。最好使用单独的数据库表来存储状态并(可选)为此创建一个 virtualField;
您的学生模型;应用程序/模型/学生.php
学生类扩展 AppModel {
public $belongsTo = array(
'Status' => array(
'type' => 'INNER',
),
};
}
您的状态模型;应用程序/模型/Status.php
类状态扩展 AppModel {
public $useTable = 'statuses';
public $hasMany = array(
'Student',
};
}
你的数据库表应该是这样的;
学生;
id primary key, autonumber
status_id id
name varchar(50),
-- etc.
状态
id primary key, autonumber
name varchar(50),
检索学生时,应自动包含状态;
例如
$data = $this->Student->find('all', array(
'fields' => array(
'Student.id',
'Student.name',
'Status.name',
),
'recursive' => 1,
));
应返回所有学生及其状态
如果要将状态名称添加为“虚拟字段”并将其包含在“学生”数组索引中;
// Create the virtual field
$this->Student->virtualFields['status_name'] = 'Status.name';
// And use it inside your query
$data = $this->Student->find('all', array(
'fields' => array(
'Student.id',
'Student.name',
'Student.status_name',
),
'recursive' => 1,
));