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]:语法错误或访问冲突”的主要内容,如果未能解决你的问题,请参考以下文章
如何将“删除”操作委托给 Cakephp 4 中的另一个模型?
CakePHP:以数组为参数调用另一个控制器动作的最佳方法?