我需要在我的cakephp 3控制器中加入3个表(电影,评论,用户)并只选择一些特殊字段。我测试了不同的解决方我经常冲浪,但我无法解决。实际上我需要在会员资料中显示最后3条评论。
以下是控制器:
$movietbl = TableRegistry::get('Services.Movies');
$movies = $movietbl->find()
->contain([
'Comments' => function($q) {
return $q->autoFields(false)
->select([ 'id' , 'title' , 'comments']);
},
'Userscomments' => function($q) {
return $q->autoFields(false)
->select(['lname', 'fname', 'id']);
}])
->where(['Movies.user_id' => $this->getUserId()])
->limit(3);
$this->set('movies', $movies);
$this->set('userId', $this->getUserId());
下面是MoviesTable
$this->belongsToMany('Userscomments', [
'className' => 'Services.Users',
'joinTable'=>'comments',
'foreignKey' => 'movie_id',
'targetForeignKey' => 'user_id',
]);
}
但它返回所有字段。我现在该怎么办?
提前致谢
答案 0 :(得分:2)
在 socklen_t peer_addr_size;
peer_addr_size = sizeof(struct sockaddr_un);
cfd = accept(sfd, (struct sockaddr *) &peer_addr,
&peer_addr_size);
:
=IF(B6="",FALSE,SUMPRODUCT((B6>=INDIRECT("Table1[Start]"))*(B6<=INDIRECT("Table1[End]"))))
autoFields(false)
或者,您可以按如下方式重写查询:
select()
答案 1 :(得分:0)
您应该传递select()
方法的字段名称。
这是在食谱中: http://book.cakephp.org/3.0/en/orm/query-builder.html#selecting-all-fields-from-a-table
您可以为modelName.fieldName格式的多表选择添加模型名称。
$movietbl->find()->select(['Movies.title', 'Comments.id'])
答案 2 :(得分:0)
经过多次改动后,我的行动终于奏效了。我改变了连接的入口视图。它工作得很好:)但我不知道为什么。我在之前的代码中使用了类似这样的解决方案。但是,它现在可以使用了
$coomentbl = TableRegistry::get('Services.Comments');
$comments = $coomentbl->find('all',['fields'=>['id','comments','created']])->select(['Users.fname','Users.lname' ,'Users.imgname' ,'Users.username'])
->contain([
'Users' => function($q) {
return $q->autoFields(false);
}
, 'Movies'=> function($q) {
return $q->autoFields(false)
->where([['Movies.user_id' => $this->getUserId()]]);
}
])->order(['Comments.created' => 'DESC'])
->limit(5)->toArray();
$this->set('comments', $comments);
$this->set('userId', $this->getUserId());