内部加入cakephp 3
问题描述:
以及我需要做一个内部连接fron 2表,但总是获得相同的错误,我发送这个邮递员,我试图接受id与这两个表执行内部连接,现在用这个例子从documentation内部加入cakephp 3
{
"message": "Failed calling Cake\\ORM\\Query::jsonSerialize()",
"url": "https://*.com/users/userdata",
"code": 500
}
和错误日志:
2017-04-20 01:50:24 Error: [Exception] Failed calling Cake\ORM\Query::jsonSerialize()
Request URL: /users/userdata
Stack Trace:
#0 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\View\JsonView.php(0): json_encode()
#1 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\View\SerializedView.php(98): Cake\View\JsonView->_serialize(Array)
#2 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\View\JsonView.php(107): Cake\View\SerializedView->render(NULL, NULL)
#3 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Controller\Controller.php(623): Cake\View\JsonView->render(NULL, NULL)
#4 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\ActionDispatcher.php(125): Cake\Controller\Controller->render()
#5 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\ActionDispatcher.php(93): Cake\Http\ActionDispatcher->_invoke(Object(App\Controller\UsersController))
#6 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\BaseApplication.php(78): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#7 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Runner.php(65): Cake\Http\BaseApplication->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#8 C:\xampp\htdocs\dekma_backend\vendor\ozee31\cakephp-cors\src\Routing\Middleware\CorsMiddleware.php(28): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#9 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Runner.php(65): Cors\Routing\Middleware\CorsMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#10 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Routing\Middleware\RoutingMiddleware.php(59): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#11 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#12 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Routing\Middleware\AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#13 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#14 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Error\Middleware\ErrorHandlerMiddleware.php(92): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#15 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#16 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Runner.php(51): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#17 C:\xampp\htdocs\dekma_backend\vendor\cakephp\cakephp\src\Http\Server.php(80): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#18 C:\xampp\htdocs\dekma_backend\webroot\index.php(38): Cake\Http\Server->run()
#19 {main}
控制器:
public function userdata()
{
$query = $this->Users->find('all')
->join([
'subsection' => [
'table' => 'subsections',
'type' => 'inner',
'conditions' => 'users.subsection_id = subsections.id',
],
'city' => [
'table' => 'cities',
'type' => 'INNER',
'conditions' => 'users.city_id = cities.id',
]
]);
//$user = $this->Users->get($id);
$this->set([
'success' => true,
'data' => $query,
'_serialize' => ['success', 'data']
]);
}
Mysql的,我需要的是这样的:
SELECT * FROM mydb.users
INNER JOIN subsections on users.subsection_id = subsections.id
INNER JOIN cities on users.city_id = cities.id;
我改变的PHP版本号的工作,但选择不为表中各部分和城市工作
答
请这样的询问之后添加->toArray();
:
$query = $this->Users->find('all')
->join([
'subsection' => [
'table' => 'subsections',
'type' => 'inner',
'conditions' => 'users.subsection_id = subsections.id',
],
'city' => [
'table' => 'cities',
'type' => 'INNER',
'conditions' => 'users.city_id = cities.id',
]
])->toArray();
并检查它。我希望它能帮助你。
你能检查你的最终的sql命令吗?你是否也在控制器中包含了指定的命名空间/路径? – marmeladze
当我从postman发送json数据时,我无法检查sql命令,这是一个问题。 – CoolLife
不,我只是想让你检查一下你的sql控制台中的查询,看它是否有错误或没有? – marmeladze