【发布时间】:2018-08-07 14:25:19
【问题描述】:
我正在开发一个轻型 ORM,它使用基本模型从数据库表中获取所有行。我有多个模型(问题、答案、评论),它们使用每个模型中声明的受保护的 $table 属性扩展基本模型。这是我在基本模型中获取表行的方法:
public function all() {
$query = "SELECT * FROM {$this->table}";
$statement = $this->database->getConnected($this->connection)->prepare($query);
$statement->setFetchMode(PDO::FETCH_CLASS, 'Core\Database\Collection');
$statement->execute();
return $statement->fetchAll();
}
当我转储结果时,我会得到类似的结果:
array(5) {
[0]=>
object(Core\Database\Collection)#31 (4) {
["id"]=>
string(1) "1"
["title"]=>
string(34) "What is your favourite video game?"
}
[1]=>
object(Core\Database\Collection)#244 (4) {
["id"]=>
string(1) "2"
["title"]=>
string(28) "What is your favourite food?"
}
}
我想知道是否有可能不是作为数组或单个对象返回,而是每个集合对象可以组合在一起作为一个大集合对象?
我知道我仍然可以使用 foreach 获得结果,但只是想让它成为一个实际的集合,而不仅仅是一个数组。
一个大集合对象
object(Core\Database\Collection) {
all: {
Namespace\Question {
["id"]=>
string(1) "1"
["title"]=>
string(34) "What is your favourite video game?"
},
Namespace\Question {
["id"]=>
string(1) "2"
["title"]=>
string(28) "What is your favourite food?"
}
}
}
【问题讨论】:
-
你有一个一个大集合对象是什么样子的例子吗?
-
PDOStatement::fetchAll — Returns an array containing all of the result set rows因此,您的解决方案是创建一个while并将每条获取的记录添加到您的集合中。 -
您的 Collection 类是否有某种 add() 方法?集合中的单个项目是否应该只是 StdClass 对象?
-
@AbraCadaver 用“集合对象”编辑了我的问题。目前我的集合类没有任何方法,因为我不确定如何获取结果集并按照我描述的方式进行分配。 Laravel 做了类似的事情,你可以在这个视频的 1:05ish 看到:laracasts.com/series/laravel-from-scratch-2017/episodes/7
-
在该视频中,有一个带有
all属性的对象,它是一个对象数组,类似于您所拥有的。