CakePHP - 调用另一个模型导致“SQLSTATE [42000]:语法错误或访问冲突”

Posted

技术标签:

【中文标题】CakePHP - 调用另一个模型导致“SQLSTATE [42000]:语法错误或访问冲突”【英文标题】:CakePHP - Calling another model causing "SQLSTATE[42000]: Syntax error or access violation" 【发布时间】:2013-10-02 07:36:38 【问题描述】:

我是 cakephp 新手,我到处寻找答案,但找不到原因。 我试图在远程模型中调用一个函数,如果我直接运行模型,它工作正常,但如果我从另一个模型运行它,它会导致“语法错误或访问冲突”错误。

代码如下:

Cpanel 控制器

class CpanelController extends AppController 

    var $uses = array('Client');

    public function index() 
        $this->Client->index();
    


客户端模型

class Client extends AppModel 
    public $useTable = 'users';

客户端控制器

class ClientController extends AppController 
    public function index() 
        echo "running";
    

当我从 mysite/Client 运行它时,它运行得很好。 但是如果我尝试从 mysite/Cpanel 加载它,它会抛出:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near 'index' at line 1

谢谢,

【问题讨论】:

Client model index action 里面的代码是什么? 只是一个简单的回显,如示例所示,我想在运行任何实际代码之前测试是否 我看到您在 echo "running"; 内有 Client 控制器.....共享整个代码。 这是完整的代码,现在 【参考方案1】:

您的User 模型中没有index 函数。

也许你打算做的是

public function index() 
        $this->Client->find('all');
    

否则你必须在模型内部创建一个索引函数

class Client extends AppModel 

    public $useTable = 'users';

    public function index() 
       // Do Something;
    

如果你想在 CpanelController 中使用 UserController,代码如下

App::uses('UserController', 'Controller');
$UserController= ClassRegistry::init('UserController');
$UserController->index();

【讨论】:

谢谢,但我想在客户端控制器中编写代码。假设我在客户端控制器中有一个函数 run_code(),我如何从模型中运行它?我试过 $this->run_code() 和 $this->Client->run_code() 。感谢您的帮助 @DanielaVolt 您可以通过将控制器调用到模型中然后使用它来实现。 示例 App::import('controller','ControllerName'); 感谢您的回答。 cakePHP的正确使用?我在***中读到不推荐使用导入,直接从其他控件调用控制器也不是最佳实践。这就是为什么我尝试从客户端模式到客户端控制器。那么,直接从控制器调用控制器是一种不好的做法吗? @DanielaVolt 为什么要从另一个控制器调用一个控制器?如果您想在控制器之间共享功能,您可能需要查看组件。 我同意@dhofstet,也许考虑创建自己的组件。在我看来,在另一个控制器中调用一个控制器并不是一个好习惯,因为它破坏了 MVC 模式

以上是关于CakePHP - 调用另一个模型导致“SQLSTATE [42000]:语法错误或访问冲突”的主要内容,如果未能解决你的问题,请参考以下文章

从cakephp1.2&1.3中的另一个模型导入模型

如何将“删除”操作委托给 Cakephp 4 中的另一个模型?

CakePHP:以数组为参数调用另一个控制器动作的最佳方法?

CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中

cakephp 你如何在模型中调用控制器的动作

CakePHP- 保存相关模型数据