我正在阅读CakePHP的初学者教程,我有一个问题:
在博客教程中,已在Controller中创建了以下功能
public function index() {
$this->set('posts', $this->Post->find('all'));
}
我正在努力更好地理解这意味着什么,特别是
$this->Post->find('all')
这是对Controller对象的Post对象的引用,然后调用它的find函数。 这个Post对象是Post对象的linkedList(或其他一些数据结构)吗?这似乎是唯一合理的方式,但我想确定。我已经习惯了Java中的OOP和PHP中的OOP新手,并且认为我可能会遗漏一些碎片。
答案 0 :(得分:1)
您的模型控制数据库访问。因此,当您需要数据库中的数据时,在Controller中,您需要使用模型来检索它。
$this->Post->find('all');
告诉'发布'模型检索所有帖子。
最佳做法实际上是不要使用Controller中的find()
方法,而是调用模型中创建的自定义方法。例如:
//inside PostsController
$posts = $this->Post->getPosts();
//inside Post Model
public function getPosts() {
return $this->find('all');
}
当你添加条件,限制,订单等等时,这通常会变得更复杂,但是这样做,它更接近MVC,M(模型)是所有数据检索。 (并且还使您的代码更清晰,因此无论何时您想要更新查找,您只需要在一个地方进行,而不是跨越多个控制器)
答案 1 :(得分:0)
它调用模型Post的方法find
。
您的模型已找到,因为它扩展了AppModel。
App::uses('AppModel', 'Model');
class Post extends AppModel {
public $name = 'Post';
}
并返回ll是这样的
(它唯一的例子,它将依赖于你的数据库和你的模型帖子/用户......等)
Array
(
[Post] => Array
(
[id] => 83
[desc] => 'it is a test post'
[user_id] => 2
)
[user] => Array
(
[id] => 2
[name] => 'rafael'
[phone] => '9999-000'
)
)
并且这个数组在变量'posts'中对你的视图访问是不可取的。