繁体   English   中英

连接“属于”另一个表的搜索结果

[英]Joining search results of a table that “belongs_to” another

visits有许多visitsTasks属于tasks

我正在查看visits表中的特定行( visitID ),并希望查找已完成的所有任务。 在这些任务中,我想访问pathmode列(在tasks表中)。

      my $visitTasks = $visit->visits_tasks()->search(
            {'me.subsection' => 'completed'},
            {join => 'task_name' } # PROBLEM HERE
            ); 
      while(my $vt=$visitTasks->next()){
         say Dumper($vt->get_columns());

         # if completed is true then record the task
         push @{$visit{Tasks}},  {taskName => $vt->task_name, path=>$vt->path, mode=>$vt->mode } if $vt->value == 1;
      }

taskNamevaluevisits_tasks列)可用。 但我无法找到语法错误或丢失的关系,以获得visitsTasks结果与加入tasks


我创建了UML图dia ,变换图形到MySQL与parsediasql ,和填充DBIX ::类dbicdump

UML图

visitsTasks

package lncddb3::Schema::Result::VisitsTask;
#...
=head2 task_name

Type: belongs_to

Related object: L<lncddb3::Schema::Result::Task>

=cut

__PACKAGE__->belongs_to(
  "task_name",
  "lncddb3::Schema::Result::Task",
  { taskName => "taskName" },
  {
    is_deferrable => 1,
    join_type     => "LEFT",
    on_delete     => "RESTRICT",
    on_update     => "RESTRICT",
  },  
);

任务

package lncddb3::Schema::Result::Task;
# ...
=head2 visits_tasks

Type: has_many

Related object: L<lncddb3::Schema::Result::VisitsTask>

=cut

__PACKAGE__->has_many(
  "visits_tasks",
  "lncddb3::Schema::Result::VisitsTask",
  { "foreign.taskName" => "self.taskName" },
  { cascade_copy => 0, cascade_delete => 0 },
);

模式

create table visits (
   visitID      int unsigned    not null auto_increment          ,
   peopleID     int unsigned                      ,
   visitdate    date                              ,
   visitTime    time                              ,
   scanID       varchar(50)                       ,
   noShow       bool                              ,
   schedualedBy varchar(50)                       ,
   checkedInBy  varchar(50)                       ,
   googleid     varchar(50)                       ,
   age          double unsigned                   ,
   onMeds       varchar(20)                       ,
   location     varchar(50)                       ,
   cohort       varchar(50)      default "control",
   quality      int                               ,
   constraint pk_visits primary key (visitID)
) 
create table visitsTasks (
   peopleID   int unsigned ,
   visitID    int unsigned ,
   taskName   varchar(50)  ,
   subsection varchar(50)  ,
   value      varchar(50)
) 
create table tasks (
   taskName varchar(50)  not null,
   taskDesc char(200)            ,
   path     varchar(300)         ,
   mode     varchar(50)          ,--  fMRI, PET, MEG,fMRI+eyetracking,eyetracking, etc
   constraint pk_tasks primary key (taskName)
)

需要花更多的时间在Cookbook上 连接的列与原始列不在同一级别。

$vt->task_name->path #not $vt->path

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM