Rumah php教程 php手册 Zend Framework教程之Zend_Db_Table表关联实例详解

Zend Framework教程之Zend_Db_Table表关联实例详解

Jun 06, 2016 pm 07:31 PM
framework table zend persatuan Contoh Tutorial

本文实例讲述了Zend Framework中Zend_Db_Table表关联用法。分享给大家供大家参考,具体如下: 介绍: 在RDBMS中,表之间有着各种关系,有一多对应,多多对应等等。 Zend框架提供了一些方法来方便我们实现这些关系。 定义关系: 下面是本文用的例子的关系定义

本文实例讲述了Zend Framework中Zend_Db_Table表关联用法。分享给大家供大家参考,具体如下:

介绍:

在RDBMS中,表之间有着各种关系,有一多对应,多多对应等等。

Zend框架提供了一些方法来方便我们实现这些关系。

定义关系:

下面是本文用的例子的关系定义:

<&#63;php
class Accounts extends Zend_Db_Table_Abstract
{
  protected $_name      = 'accounts';
  protected $_dependentTables = array('Bugs');
}
class
class
  protected
  protected
class
  protected
}
Products extends Zend_Db_Table_Abstract
{
  protected $_name      = 'products';
  protected $_dependentTables = array('BugsProducts');
}
Bugs extends Zend_Db_Table_Abstract
{
  protected $_name      = 'bugs';$_dependentTables = array('BugsProducts');$_referenceMap  = array(
    'Reporter' => array(
      'columns'      => 'reported_by',
      'refTableClass'   => 'Accounts',
      'refColumns'    => 'account_name'
    ),
    'Engineer' => array(
      'columns'      => 'assigned_to',
      'refTableClass'   => 'Accounts',
      'refColumns'    => 'account_name'
    ),
    'Verifier' => array(
      'columns'      => array('verified_by'),
      'refTableClass'   => 'Accounts',
      'refColumns'    => array('account_name')
    )
  );
}
BugsProducts extends Zend_Db_Table_Abstract
{
  protected $_name = 'bugs_products';$_referenceMap  = array(
    'Bug' => array(
      'columns'      => array('bug_id'),
      'refTableClass'   => 'Bugs',
      'refColumns'    => array('bug_id')
    ),
    'Product' => array(
      'columns'      => array('product_id'),
      'refTableClass'   => 'Products',
      'refColumns'    => array('product_id')
    )
  );

Salin selepas log masuk

我们看到例子中定义了四个类:Accounts,Products,Bugs,BugsProducts。其中Accounts,Products和Bugs是三个实体表,而BugsProducts是关系表。

我们再来分析一下这三个实体,一个Account有多个Bug,他们之间是一对多的关系,而Bug和Product是多对多的关系。

$_dependentTables是一个与该对象关联的对象名,这里注意,要写对象名而不是关联的数据库名。

$_referenceMap数组用来定义和其他表的关系,在这里可以设置和那些表有关系,有什么样的关系。第一个设置的是Rule Key,也就是上面例子的'Reporter', 'Engineer'之类的。Rule Key的作用其实就是一个关系的名字,并不需要和其他数据库表名或者其他对象名的名字一样。只是为了标记的,在后面的时候,我们可以看到这个Rule Key的作用。

每一个Rule下面都有如下的一些定义:(没有特殊说明,都以如上'Reporter'关系进行说明)

columns=> 设置和别的表关联的字段名,如上的'report_by'就是数据库中表Bugs的report_by字段。这里只有一个字段,也可以设置多个字段。

refTableClass=>用于设置与这个表发生关系的表。这里要注意,一定使用目标表的对象的名字而不是表名字,例子中就和'Account'对象发生了关联。

refColumns =>设置发生联系的表的字段。可以写多个,如果和多个字段发生联系的话,这里要和columns对应。这个设置其实是可选的,如果为空,关联字段自动被设置成为关联表的主键。上面例子中并没有使用主键作为关联字段,所以手动设置。

onDelete=>可选字段,设置当删除是的动作。
onUpdate=>可选字段,设置当更新表时的动作。

以上定义关系。

从关联表中取数据:

如果我们已经得到了一个查询结果,我们可以通过一下语句去取得这个结果相关联的表的查询结果:

$row->findDependentRowset($table, [$rule]);

Salin selepas log masuk

这个方法一般使用与一多对应的两个实体表中,在多多对应的两个实体表和一个关系表如何从一个实体表取出另一个实体表的数据,我们会在下面叙述。

第一个字段$table是指和这个表想相联系的表对应的类名。第二个字段是可选的,是我们刚刚说到的rule key,就是这个关系的名字,如果省略,则默认为这个表中的第一个关系。下面是例子:

<&#63;php
$accountsTable   = new Accounts();
$accountsRowset   = $accountsTable->find(1234);
$user1234      = $accountsRowset->current();
$bugsReportedByUser = $user1234->findDependentRowset('Bugs');

Salin selepas log masuk

例子中,我们先读取了一个编号为1234的用户,然后去查找这个家伙报了什么bug,由于zend默认是第一个关联,所以这里和Account发生关联的第一个就是'Reporter,所以就取出了Reporter的记录。

如果我们想取出其他的记录,比如Engineer,可以按照下面的办法:

<&#63;php
$accountsTable   = new Accounts();
$accountsRowset   = $accountsTable->find(1234);
$user1234      = $accountsRowset->current();
$bugsAssignedToUser = $user1234->findDependentRowset('Bugs', 'Engineer');

Salin selepas log masuk

除了使用findDependentRowset之外,我们还可以使用叫做“魔术方法”(Magic Method)的机制。之所以这么叫,就是因为好像是在变魔术一样。所以方法findDependentRowset('', '')就可以等价于如下:

- $row->find()
- $row->findBy()

注:这个机制是我们最一开始是在Ruby on Rails里面看到的。这里的一定要使用和相关联的类名以及关联名(Rule Key)完全一样的名字,才可以生效。下面是例子:

<&#63;php
$accountsTable  = new Accounts();
$accountsRowset  = $accountsTable->find(1234);
$user1234     = $accountsRowset->current();
// Use the default reference rule
$bugsReportedBy  = $user1234->findBugs();// Specify the reference rule
$bugsAssignedTo  = $user1234->findBugsByEngineer();

Salin selepas log masuk

<&#63;php
$bugsTable     = new Bugs();
$bugsRowset    = $bugsTable->fetchAll('bug_status = &#63;', 'NEW');
$bug1       = $bugsRowset->current();
// Use the default reference rule
$reporter     = $bug1->findParentAccounts();// Specify the reference rule
$engineer     = $bug1->findParentAccountsByEngineer();

Salin selepas log masuk

从父表取得字段:

刚刚我们介绍了一多关系中的从一去多的方法,现在我们反过来,从多取一,其实是从多中的一个取他相对应的那个记录。

类似的我们有这样的语句:

$row->findParentRow($table, [$rule]);

Salin selepas log masuk

类似的,$table为类名,而可选参数$rule填入对应的Rule Key。下面是例子:

<&#63;php
$bugsTable     = new Bugs();
$bugsRowset    = $bugsTable->fetchAll(array('bug_status = &#63;' => 'NEW'));
$bug1       = $bugsRowset->current();
$reporter     = $bug1->findParentRow('Accounts');

Salin selepas log masuk

和上面不太一样的是,上面返回的是一个多个记录的集合,而这次返回的必然是一条记录。下面的例子是设置Rule:

<&#63;php
$bugsTable     = new Bugs();
$bugsRowset    = $bugsTable->fetchAll('bug_status = &#63;', 'NEW');
$bug1       = $bugsRowset->current();
$engineer     = $bug1->findParentRow('Accounts', 'Engineer');

Salin selepas log masuk

只需要吧Rule填入就好了。相似的,这个方法也有“魔术字段”。findParentRow('', '')对应:

- $row->findParent()
- $row->findParentBy()

例子:

取得多对多关系表的字段:

上面两个方法讲述了一对多的使用,下面就是多对多了。我们使用如下方法取得多对多关系表的数据:

$row->findManyToManyRowset($table, $intersectionTable, [$rule1, [$rule2]]);

Salin selepas log masuk

这里参数变成了4个,因为需要增加一个关系表来存储多对多的关系。

$table是与之发生多对多关系的表的类名,$intersectionTable是中间存储关系的关系表的类名。$rule1和$rule2是上面两个数据表的Rule Key。省略Rule Key的例子如下:

<&#63;php
$bugsTable    = new Bugs();
$bugsRowset    = $bugsTable->find(1234);
$bug1234     = $bugsRowset->current();
$productsRowset  = $bug1234->findManyToManyRowset('Products', 'BugsProducts');

Salin selepas log masuk

下面是该方法的全部参数调用例子:

<&#63;php
$bugsTable    = new Bugs();
$bugsRowset    = $bugsTable->find(1234);
$bug1234     = $bugsRowset->current();
$productsRowset  = $bug1234->findManyToManyRowset('Products', 'BugsProducts', 'Bug');

Salin selepas log masuk

这次的“魔术方法”是,对应 findManyToManyRowset('', '', '', '')
- $row->findVia()
- $row->findViaBy()
- $row->findViaByAnd()

例子:

<&#63;php
$bugsTable    = new Bugs();
$bugsRowset    = $bugsTable->find(1234);
$bug1234     = $bugsRowset->current();
// Use the default reference rule
$products     = $bug1234->findProductsViaBugsProducts();// Specify the reference rule
$products     = $bug1234->findProductsViaBugsProductsByBug();

Salin selepas log masuk

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial cara menggunakan Dewu Tutorial cara menggunakan Dewu Mar 21, 2024 pm 01:40 PM

Dewu APP pada masa ini merupakan perisian beli-belah jenama yang sangat popular, tetapi kebanyakan pengguna tidak tahu cara menggunakan fungsi dalam APP Dewu Panduan tutorial penggunaan yang paling terperinci Seterusnya, editor membawakan Dewuduo kepada pengguna tutorial. Pengguna yang berminat boleh datang dan lihat! Tutorial cara menggunakan Dewu [2024-03-20] Cara menggunakan pembelian ansuran Dewu [2024-03-20] Cara mendapatkan kupon Dewu [2024-03-20] Cara mencari perkhidmatan pelanggan manual Dewu [2024-03- 20] Cara menyemak kod pikap Dewu【2024-03-20】Di mana hendak mencari pembelian Dewu【2024-03-20】Cara membuka VIP Dewu【2024-03-20】Cara memohon pemulangan atau pertukaran Dewi

Pada musim panas, anda mesti cuba menembak pelangi Pada musim panas, anda mesti cuba menembak pelangi Jul 21, 2024 pm 05:16 PM

Selepas hujan pada musim panas, anda sering dapat melihat pemandangan cuaca istimewa yang indah dan ajaib - pelangi. Ini juga merupakan pemandangan jarang yang boleh ditemui dalam fotografi, dan ia sangat fotogenik. Terdapat beberapa syarat untuk pelangi muncul: pertama, terdapat titisan air yang mencukupi di udara, dan kedua, matahari bersinar pada sudut yang lebih rendah. Oleh itu, adalah paling mudah untuk melihat pelangi pada sebelah petang selepas hujan reda. Walau bagaimanapun, pembentukan pelangi sangat dipengaruhi oleh cuaca, cahaya dan keadaan lain, jadi ia biasanya hanya bertahan untuk jangka masa yang singkat, dan masa tontonan dan penangkapan terbaik adalah lebih pendek. Jadi apabila anda menemui pelangi, bagaimanakah anda boleh merakamnya dengan betul dan mengambil gambar dengan kualiti? 1. Cari pelangi Selain keadaan yang dinyatakan di atas, pelangi biasanya muncul mengikut arah cahaya matahari, iaitu jika matahari bersinar dari barat ke timur, pelangi lebih cenderung muncul di timur.

Tutorial tentang cara mematikan bunyi pembayaran di WeChat Tutorial tentang cara mematikan bunyi pembayaran di WeChat Mar 26, 2024 am 08:30 AM

1. Mula-mula buka WeChat. 2. Klik [+] di penjuru kanan sebelah atas. 3. Klik kod QR untuk mengutip bayaran. 4. Klik tiga titik kecil di penjuru kanan sebelah atas. 5. Klik untuk menutup peringatan suara untuk ketibaan pembayaran.

Tutorial DisplayX (perisian ujian monitor). Tutorial DisplayX (perisian ujian monitor). Mar 04, 2024 pm 04:00 PM

Menguji monitor semasa membelinya adalah bahagian penting untuk mengelakkan membeli yang rosak Hari ini saya akan mengajar anda cara menggunakan perisian untuk menguji monitor. Langkah kaedah 1. Mula-mula, cari dan muat turun perisian DisplayX di tapak web ini, pasang dan bukanya, dan anda akan melihat banyak kaedah pengesanan yang diberikan kepada pengguna. 2. Pengguna mengklik pada ujian lengkap biasa Langkah pertama adalah untuk menguji kecerahan paparan Pengguna melaraskan paparan supaya kotak dapat dilihat dengan jelas. 3. Kemudian klik tetikus untuk masuk ke pautan seterusnya Jika monitor boleh membezakan setiap kawasan hitam dan putih, bermakna monitor masih elok. 4. Klik butang kiri tetikus sekali lagi, dan anda akan melihat ujian skala kelabu monitor Lebih lancar peralihan warna, lebih baik monitor. 5. Selain itu, dalam perisian displayx kita

Apakah perisian photoshopcs5? -Tutorial penggunaan photoshopcs5 Apakah perisian photoshopcs5? -Tutorial penggunaan photoshopcs5 Mar 19, 2024 am 09:04 AM

PhotoshopCS ialah singkatan daripada Photoshop Creative Suite Ia adalah perisian yang dihasilkan oleh Adobe Ia digunakan secara meluas dalam reka bentuk grafik dan pemprosesan imej Sebagai seorang pelajar baru yang belajar PS, hari ini biarkan editor menerangkan kepada anda apa itu perisian photoshopcs5. . 1. Apakah perisian photoshop cs5? Adobe Photoshop CS5 Extended sesuai untuk profesional dalam bidang filem, video dan multimedia, pereka grafik dan web yang menggunakan 3D dan animasi, dan profesional dalam bidang kejuruteraan dan saintifik. Paparkan imej 3D dan cantumkannya menjadi imej komposit 2D. Edit video dengan mudah

Pakar mengajar anda! Cara Yang Betul untuk Memotong Gambar Panjang pada Telefon Mudah Alih Huawei Pakar mengajar anda! Cara Yang Betul untuk Memotong Gambar Panjang pada Telefon Mudah Alih Huawei Mar 22, 2024 pm 12:21 PM

Dengan perkembangan telefon pintar yang berterusan, fungsi telefon bimbit semakin berkuasa, antaranya fungsi mengambil gambar panjang menjadi salah satu fungsi penting yang digunakan oleh ramai pengguna dalam kehidupan seharian. Tangkapan skrin panjang boleh membantu pengguna menyimpan halaman web yang panjang, rekod perbualan atau gambar pada satu masa untuk memudahkan tontonan dan perkongsian. Di antara banyak jenama telefon bimbit, telefon bimbit Huawei juga merupakan salah satu jenama yang sangat dihormati oleh pengguna, dan fungsinya untuk memotong gambar panjang juga sangat dipuji. Artikel ini akan memperkenalkan anda kepada kaedah yang betul untuk mengambil gambar panjang pada telefon mudah alih Huawei, serta beberapa petua pakar untuk membantu anda menggunakan telefon mudah alih Huawei dengan lebih baik.

Tutorial PHP: Bagaimana untuk menukar jenis int kepada rentetan Tutorial PHP: Bagaimana untuk menukar jenis int kepada rentetan Mar 27, 2024 pm 06:03 PM

Tutorial PHP: Cara Menukar Jenis Int kepada Rentetan Dalam PHP, menukar data integer kepada rentetan adalah operasi biasa. Tutorial ini akan memperkenalkan cara menggunakan fungsi terbina dalam PHP untuk menukar jenis int kepada rentetan, sambil memberikan contoh kod khusus. Gunakan cast: Dalam PHP, anda boleh menggunakan cast untuk menukar data integer kepada rentetan. Kaedah ini sangat mudah Anda hanya perlu menambah (rentetan) sebelum data integer untuk menukarnya menjadi rentetan. Di bawah ialah kod contoh mudah

Tutorial peningkatan sistem Hongmeng telefon bimbit Honor Tutorial peningkatan sistem Hongmeng telefon bimbit Honor Mar 23, 2024 pm 12:45 PM

Telefon mudah alih Honor sentiasa digemari oleh pengguna kerana prestasi cemerlang dan sistem yang stabil. Baru-baru ini, telefon bimbit Honor telah mengeluarkan sistem Hongmeng baharu, yang telah menarik perhatian dan jangkaan ramai pengguna. Sistem Hongmeng dikenali sebagai sistem yang "menyatukan dunia". Ia mempunyai pengalaman operasi yang lebih lancar dan keselamatan yang lebih tinggi, membolehkan pengguna mengalami dunia telefon pintar yang serba baharu. Ramai pengguna telah menyatakan bahawa mereka ingin menaik taraf sistem telefon bimbit Honor mereka kepada sistem Hongmeng Jadi, mari kita lihat tutorial naik taraf sistem Hongmeng telefon bimbit Honor. pertama, saya

See all articles