【问题标题】:retreiving fields from asscoaied models cakephp3从关联模型中检索字段 cakephp 3
【发布时间】:2017-07-09 00:36:40
【问题描述】:

我从文档中不明白为什么我不能从关联数据中检索选定的字段。 我在包含 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

【问题讨论】:

  • 您当前的模型是什么(是学生吗?),您可以发布您在模型中所做的关联吗?
  • 我在上面加了

标签: cakephp cakephp-3.0


【解决方案1】:

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

 $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();

【讨论】:

  • 我从上面的代码中得到错误'Subjects is not associated with Subjects'。我不明白为什么这不起作用
  • 我已经要求你这个“你现在的模型是什么(是学生吗?)你能把你在模型中建立的关联贴出来吗?-”,如果你能提供这个,那么我可以给你很好地解决了你的问题。 @jagguy
  • 能否分享您的 Team Viewer 访问权限,以便我调试 @jagguy
  • 我的团队查看器不起作用。我完全复制了您的代码并修复了缺少的报价。必须与多对多关系有所不同
  • @jagguy 在连接表上有,或者至少应该是一个(如错误消息中所示),只需尝试并将SubjectsStudents.student_id 添加到字段列表中。 matching() 用于过滤行,而不是列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
相关资源
最近更新 更多