0

我正在阅读 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 新手,我认为我可能会遗漏一些内容。

4

2 回答 2

1

您的模型控制数据库访问。因此,当您想要从数据库中获取数据时,在控制器中,您需要使用模型来检索它。

$this->Post->find('all');

告诉“帖子”模型检索所有帖子。

最佳实践实际上是根本不使用find()Controller 中的方法,而是调用在 Model 中创建的自定义方法。例如:

//inside PostsController
$posts = $this->Post->getPosts();

//inside Post Model
public function getPosts() {
    return $this->find('all');
}

当您添加条件、限制、订单等时,这通常会变得更加复杂,但是这样做,它更接近于 MVC,M(模型)是所有数据检索的对象。(并且还使您的代码更清晰,因此无论何时您想要更新查找,您只需在一个地方进行,而不是跨多个控制器)

于 2013-04-15T20:31:07.697 回答
0

它调用find模型 Post 的方法。您的模型已经找到,因为它扩展了 AppModel。

   App::uses('AppModel', 'Model');
  class Post extends AppModel {
        public $name = 'Post';
    }

并返回将是这样的

(它唯一的例子,它将取决于你的数据库和你的模型帖子/用户......等)

Array
(
    [Post] => Array
        (
            [id] => 83
            [desc] => 'it is a test post'
            [user_id] => 2

        )

    [user] => Array
        (
            [id] => 2
            [name] => 'rafael'
            [phone] => '9999-000'
        )
)

并且该数组将负责您在变量“帖子”中的视图访问。

于 2013-04-15T20:09:28.423 回答