【发布时间】:2019-01-10 12:42:46
【问题描述】:
我正在CakePHP 3.x 上创建一个项目,我是新手。我在使用 hasMany 相关表来获取我的实体名称而不是它们的 ID 时遇到问题。
我来自 CakePHP 2.x,在那里我使用了 App::import('controller', array('Users'),但在视图中检索所有要显示的数据而不是 id,据说这是一种不好的做法。而且我不希望在我的新代码中有任何代码违规。有谁能够帮我?这是代码:
public function view($id = null)
{
$this->loadModel('Users');
$relatedUser = $this->Users->find()
->select(['Users.id', 'Users.email'])
->where(['Users.id'=>$id]);
$program = $this->Programs->get($id, [
'contain' => ['Users', 'ProgramSteps', 'Workshops']
]);
$this->set(compact('program', 'users'));
$this->set('_serialize', ['ast', 'relatedUser']);
}
我希望在program表的relatedUsers中得到用户的email,但实际输出是:
Notice (8): Trying to get property 'user_email' of non-object [APP/Template\Asts\view.ctp, line 601].
真的需要帮助
提前谢谢你。
【问题讨论】:
-
你能把
debug($relatedUser)的结果放在控制器动作的最后吗?我怀疑查询对象根本没有执行。 -
这是我在运行 debug($relatedUser) 警告 (512) 时得到的结果:无法发出标头。在文件中发送的标头=C:\xampp\htdocs\Apps\apc-crud\vendor\cakephp\cakephp\src\Error\Debugger.php line=952 [CORE\src\Http\ResponseEmitter.php, line 48] 代码上下文Cake\Http\ResponseEmitter::emit() - CORE\src\Http\ResponseEmitter.php,第 48 行 Cake\Http\Server::emit() - CORE\src\Http\Server.php,第 141 行 [main] - ROOT\webroot\index.php,第 40 行
-
不,这不是调试结果。您引用了从页面产生的警告。请给出调试结果。
-
object(Cake\ORM\Query) { '(help)' => '这是一个 Query 对象,用于获取结果执行或迭代。', 'sql' => 'SELECT Users .id AS
Users__id, Users.email ASUsers__emailFROM users Users WHERE Users.id = :c0', 'params' => [ ':c0' => [ 'value' => '1', 'type ' => 'integer', 'placeholder' => 'c0' ] ], 'defaultTypes' => [ 'Users__id' => 'integer', 'Users.id' => 'integer', 'id' => ' integer', 'Users__slug' => 'string', 'Users__email' => 'string', 'Users.email' => 'string', 'email' => 'string', 'Users__password' => 'string' ] ,
标签: cakephp-3.0