这是我今天发表的第二篇文章,因为我在PHP中的OOP非常新,所以如果这是一个愚蠢的问题请耐心等待......
我创建了一个漂亮的类,我希望能够与我的“JOB”对象一起使用,包括能够使用这个单个对象从多个表中提取数据,以便最终用户看到相关数据。例如,在我的班上,我有:
public function showProjectManager() {
$q = "SELECT m.name FROM " . jJOBS . " AS j JOIN " . jMEI . " AS m ON m.uid = j.mei WHERE id = " . $this->id;
$r = $this->_dblink->query($q);
$row = $r->fetch_assoc();
return $row['name'];
}
因为存储在jJOBS表中的数据只是一个引用另一个表中的id的数字。存储在主jJOBS表中的有几个这样的数据。
因此,在另一部分代码中有一个下拉框,允许用户选择特定的“JOB”并使用AJAX调用我想显示该JOB中的数据。我要做的是创建一个JOB对象(包括showProjectManager方法),使用 mysqli_fetch_object 从数据库中读取所有属性,然后调用showProjectManager方法,如下所示:
$disp = new Job();
$q = "SELECT * FROM " . jJOBS . " WHERE id = " . $job_id;
$r = $jobsdb->query($q);
$disp = $r->fetch_object();
$zList .= "<li><span class='smLabels l'>Project Manager :</span>\n<span class='smText r'>" . $disp->showProjectManager() . "</span></li>";
但是每当我从数据库中获取对象时, $ disp 对象都会恢复为stdClass。如何维护正确的类并从DB访问我需要的值?我在这个主题上阅读的所有内容都要求使用DataMapper,这看起来非常复杂,特别是对于这种情况。
答案 0 :(得分:1)
最简单的方法是将类名传递给fetch_object
,如下所示:
$q = "SELECT * FROM " . jJOBS . " WHERE id = " . $job_id;
$r = $jobsdb->query($q);
$disp = $r->fetch_object("Job");
根据文档,这将创建$disp
作为Job
类型的对象,其所有字段都已填写,然后调用Job
构造函数。< / p>
答案 1 :(得分:0)
您正在重置$ disp变量。您需要在作业对象中设置作业。像这样将id传递给构造函数。
class Job {
private $job = null;
function __construct($id = null) {
if(isset($id)) {
$q = "SELECT * FROM " . jJOBS . " WHERE id = " . $job_id;
$r = $jobsdb->query($q);
$job = $r->fetch_object();
$this->job = $job;
}
}
function getJob() {
return $this->job;
}
public function showProjectManager() {
$q = "SELECT m.name FROM " . jJOBS . " AS j JOIN " . jMEI . " AS m ON m.uid = j.mei WHERE id = " . $this->job->id;
$r = $jobsdb->query($q);
$row = $r->fetch_object();
return $row->name;
}
}
?>
然后
$disp = new Job(123);
$disp->someJobObjectFunction();