如何在cakephp 3中选择查询中的特殊字段

时间:2015-12-16 13:16:06

标签: cakephp cakephp-3.0

我需要在我的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',
        ]);
    }

但它返回所有字段。我现在该怎么办?

提前致谢

3 个答案:

答案 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());