【问题标题】:CakePHP Access Multiple Database Table from a ModelCakePHP 从一个模型访问多个数据库表
【发布时间】:2014-03-15 17:40:53
【问题描述】:

我正在使用 CakePHP 2.x

有几个数据库表设置:

1) 水果 2) 蔬菜 3) 喝

我可以使用下面的这一行在 CONTROLLER 中访问这些数据库表。通过这一行,我可以访问这些其他表。

public $uses = array('Get', 'Fruit', 'Vege', 'Drink');

我的问题是尝试在模型中访问它们时。当我在下面尝试这段代码时,会发生错误。

App::uses('AppModel', 'Model');

class Get extends AppModel {



        public function getHistory( $limit ) {


        $searchLimit = $limit;


        $raw = $this->Fruit->find('all')

'$this->Fruit' 行发生错误。

在非对象上调用成员函数 find()...

任何想法如何在单个模型中调用多个数据库表?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    由于在 CONTROLLER 中访问所有数据库表都可以正常工作,因此我在 CONTROLLER 而不是 MODEL 中执行了此操作。在 CONTROLLER 中执行此操作似乎更容易和直接。

    在 CONTROLLER 中创建一个私有函数,并由其他函数使用 '$this->myPrivateFunctionName()' 访问

    【讨论】:

      【解决方案2】:

      首先你应该阅读模型关联Model associations

      其次,如果这不符合您的需求(这意味着模型之间没有明确的关联,老实说我看不出GetFruit 之间的联系)您可以使用ClassRegistry

      $Fruit = ClassRegistry::init('Fruit');
      

      在你可以使用ClassRegistry之前你必须在类定义之前添加这个:

      App::uses('ClassRegistry', 'Utility');
      

      【讨论】:

      • 谢谢,但我尝试了“ClassRegistry”,但没有成功。我正在使用“获取”方法作为获取水果和其他物品的集中方式。
      【解决方案3】:

      $belongsTo, $hasMany or what ever relation you want.关联模型

      $this->Fruit->find()访问

      【讨论】:

      • 谢谢。我阅读了 '$hasMany' 和其他关系,但找不到合适的解决方案。
      • 您是如何调用 getHistory() 函数以及从哪个控制器调用的?如果您在 GetsController 中,则通过 '$this->Get->getHistory($limit)' 调用 getHistory()
      猜你喜欢
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多