美好的一天。 :)我是CakePHP的新手所以请耐心等待。
我有一名模范学生。学生的属性状态是整数。我想根据学生的状态创建虚拟字段。
示例:
Status VirtualField
1 new student
2 new student - transferee
3 old student - shiftee
4 old student
非常感谢任何帮助。谢谢。
答案 0 :(得分:3)
您没有指定您正在使用的RDMS,我假设MySQL
如果你想让这个虚拟字段基于固定字符串,你可以通过MySQL中的CASE
实现这个目的,并使用它来定义虚拟字段
$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
",
);
}
在我的回答中,我假设您正在尝试使用固定字符串作为标题。最好使用单独的数据库表来存储状态,并(可选)为其创建虚拟字段;
你的学生模特;应用程序/型号/ Student.php
class Student扩展AppModel {
public $belongsTo = array(
'Status' => array(
'type' => 'INNER',
),
};
}
您的状态模型;应用程序/型号/ Status.php
class Status扩展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,
));