【问题标题】:cakephp - joining tablescakephp - 加入表格
【发布时间】:2011-03-17 17:26:17
【问题描述】:

我有一个带有关联的模型。根表是 Master_student。其他所有内容都有 master_student_ssn 的外键

<?php

class MasterStudent extends AppModel {

    var $name = 'MasterStudent';
    var $primaryKey = 'ssn';
    var $displayField = 'SSN';
    var $useTable = 'MASTER_STUDENTS';
    var $order = array("ssn" => "asc");




    var $hasMany = array(
        'MasterEmail' => array(
            'className' => 'MasterEmail',
            'foreignKey' => 'master_student_ssn',
            'conditions' => '',
            'order' => 'source',
            'limit' => '',
            'dependent' => true
        ),
        'MasterAddress' => array(
            'className' => 'MasterAddress',
            'foreignKey' => 'master_student_ssn',
            'conditions' => '',
            'order' => 'source',
            'limit' => '',
            'dependent' => true
        ),
        'MasterPhone' => array(
            'className' => 'MasterPhone',
            'foreignKey' => 'master_student_ssn',
            'conditions' => '',
            'order' => 'source',
            'limit' => '',
            'dependent' => true
        ),
        'MasterStudentName' => array(
            'className' => 'MasterStudentName',
            'foreignKey' => 'master_student_ssn',
            'conditions' => '',
            'order' => 'Effective_Date desc,source',
            'limit' => '',
            'dependent' => true
        )
    );

}

?>


 [MASTER_STUDENTS](
    [SSN] [int] NOT NULL,
    [date_student_added] [datetime] NULL,
 CONSTRAINT [PK_MASTER_STUDENT] PRIMARY KEY CLUSTERED 
(
    [SSN] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]


[MASTER_ADDRESSES](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [master_student_ssn] [int] NOT NULL,
    [address1] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [city] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [state] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [zip] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_master_addresses] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

[MASTER_STUDENT_NAMES](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [master_student_ssn] [int] NOT NULL,
    [First_Name] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [Middle_Name] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [Last_Name] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_MASTER_STUDENTS_NAMES] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

如何使用 cake 的 find 方法,以便我可以通过搜索一个人的名字来列出所有与一个人有关的地址、电话、姓名

1) 姓氏 2) 电话号码

即。我希望通过 cake 对这些表进行连接来与模型关联的所有数据。

MasterStudent Model中的代码是

 $opts = array(
            'conditions' => array(
                'MasterStudentName.last_name LIKE ' => $searchvalue . '%'
            )
        );
        $this->MasterStudent->recursive = 1;
        $data = $this->MasterStudent->find('all', $opts);

使用 JohnP 的方法生成的查询是

选择 [MasterStudent].[SSN] AS [MasterStudent__0], CONVERT(VARCHAR(20), [MasterStudent].[date_student_added], 20) AS [MasterStudent_1], [MasterStudent].[ssn] AS [MasterStudent_2], [MasterStudent].[ssn] AS [MasterStudent_8], [MasterStudent].[ssn] AS [MasterStudent_19], [MasterStudent].[ssn] AS [MasterStudent_26], [MasterStudent].[ssn] AS [MasterStudent_36] FROM [MASTER_STUDENTS] AS [MasterStudent] WHERE [MasterStudentName]。[Last_name] = 'Smith'

【问题讨论】:

  • 你真的还在使用 PHP 4 吗?
  • @Justin,这只是 Cake 的代码生成。这样做是为了保持兼容
  • 我指的是在 PHP 类声明中使用 var

标签: cakephp


【解决方案1】:

一种组织数据的奇怪方式,但应该这样做。

$opts = array(
  'conditions' => array(
     'MasterStudentName.last_name' => 'something', //assuming last name is stored in MasterStudentName
     'MasterPhone.phone' => '23525222'
  )
);
$this->MasterStudent->recursive = 1;
$data = $this->MasterStudent->find('all', $opts);

Recursive 设置为 1,因此它将拉出所有关联。

【讨论】:

  • 此查询不会从 Master Student Names 表中提取任何内容。它确实从 Master Student 中选择了所有列并且失败了,因为它试图匹配 MasterStudentName.last_name 存在于 Master Student Name 表中...帮助!
  • 除非您建立数据库结构,否则我无法帮助您。只需在您的问题中以简单的格式列出表格即可。 不要只转储你的 sql
  • 感谢 JohnP,我已经编辑了原始问题以表示简化的表结构
  • 看你的桌子,我不明白是什么问题。 MasterStudentNamelast_name 列,并对其进行比较。有什么问题?
  • 我已经发布了查询和代码。问题是 FROM 子句中没有选择 MasterStudentName。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多