我正在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']);
}
我希望在程序表的relatedUsers中获取用户的电子邮件,但实际输出为:
Notice (8): Trying to get property 'user_email' of non-object [APP/Template\Asts\view.ctp, line 601].
真的需要帮助
谢谢。
答案 0 :(得分:0)
您已经要求它序列化relatedUser
变量,但这是针对JSON和XML视图的。您实际上并没有为该视图set
relatedUser
变量:
$this->set(compact('program', 'users', 'relatedUser'));
此外,您在此处设置$users
变量,但从未初始化。
答案 1 :(得分:0)
除了@Greg的答案之外,变量$relateduser
仍然是查询对象,这意味着尝试访问email
属性将失败。该查询仍然需要首先执行。
您可以将查询更改为:
$relatedUser = $this->Users->find()
->select(['Users.id', 'Users.email'])
->where(['Users.id' => $id])
->first();
现在执行查询并仅返回第一项。
有很多方法可以使查询执行,其中很多是隐式使用的。参见: