从asscoaied模型cakephp3中恢复领域

时间:2017-07-09 00:36:40

标签: cakephp cakephp-3.0

我不明白为什么我无法从关联数据中检索选定字段。  我在包含中有2对多关系,显示一切正常。

$query3 = $this->find()
              ->contain(['Subjects','AvailabilityForStudents'])
              ->select([
                  'Students.id','Students.first_name','Students.last_name','Students.address_billing','Students.address_lat','Students.address_long',
                  'Students.class_year','Students.address_street','Students.address_suburb','Students.address_postcode','Students.address_state'])
               ->where(['Students.id IN' => $stids])
              ->order(['Students.first_name' => 'ASC'])
              ->hydrate(true);

我的问题是,不是从包含的模型中获取每个字段,为什么我不能从包含的模型中选择字段,如下所示?我没有根据匹配条款中的标准进行选择?

   $query3 = $this->find()
              ->contain(['Subjects','AvailabilityForStudents'])
              ->select(['Subjects.name','Subjects.id','AvailabilityForStudents.id',
                  'Students.id','Students.first_name','Students.last_name','Students.address_billing','Students.address_lat','Students.address_long',
                  'Students.class_year','Students.address_street','Students.address_suburb','Students.address_postcode','Students.address_state'])
               ->where(['Students.id IN' => $stids])
              ->order(['Students.first_name' => 'ASC'])
              ->hydrate(true);

//学生模特

 $this->hasMany('AvailabilityForStudents', [
            'className' => 'AvailabilityForStudents',
            'foreignKey' => 'student_id',
            'dependent' => false,
        ]);

  $this->belongsToMany('Subjects', [
            'foreignKey' => 'student_id',
            'targetForeignKey' => 'subject_id',
            'joinTable' => 'subjects_students'
        ]);

      //update contain
 $query3 = $this->find()
                   ->contain([

                              'Subjects'=>['fields'=>['name','id','SubjectsStudents.student_id']],
                              'AvailabilityForStudents'  ])
              //   ->contain(['Subjects','AvailabilityForStudents'])
                 ->where(['Students.student_unallocated' =>  1,'Students.student_inactive' =>  0])

              ->order(['Students.first_name' => 'ASC'])
              ->hydrate(true);

https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

1 个答案:

答案 0 :(得分:2)

你做得对。 你也可以试试这个,

 $query3 = $this->find()
                  ->contain([
                                'Subjects'=>['fields'=>['name','id','SubjectsStudents.student_id']],
                              'AvailabilityForStudents'=>['fields'=>'id']
                           ])
                  ->select(['Students.id','Students.first_name','Students.last_name','Students.address_billing','Students.address_lat','Students.address_long',
                      'Students.class_year','Students.address_street','Students.address_suburb','Students.address_postcode','Students.address_state'])
                   ->where(['Students.id IN' => $stids])
                  ->order(['Students.first_name' => 'ASC'])
                  ->hydrate(false)->toArray();