模型关联和数据建模

时间:2011-11-08 16:26:04

标签: php model-view-controller database-design cakephp data-modeling

我正在为美术馆开发一个网络应用程序,我想检查一下我是否正确设置了数据模型。

我有一个people表和一个artists表。有些peopleartists,有些则不是。{/ p>

我还有一个products表,每个product属于一个artist

以下是表格的简化版本:

products
********
id
title
artist_id

artists
*******
id
profile
rating
person_id

people
******
id
first_name
last_name

我需要能够在find()模型上执行Product方法时检索艺术家的名字。

我是否正确设置了数据模型?如果是,那么在不获取大量不需要的数据的情况下检索艺术家姓名的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

可以使用CakePHP的bindModel& unbindModel建立不依赖于Cake的自动化善的关系。

由于您有兴趣在产品模型上进行查找,因此我将列出一个可以从产品控制器调用的示例:

// unbind Artist
$this->Product->unbindModel(array(
  'belongsTo' => array('Artist')
));

// bind Artist & Person using explicit conditions
$this->Product->bindModel(array(
  'hasOne' => array(
    'Artist' => array(
      'foreignKey' => false,
      'conditions' => array('Artist.id = Product.artist_id')
    ),
    'Person' => array(
      'foreignKey' => false,
      'conditions' => array('Person.id = Artist.person_id')
    ),
  )
));

// return the person
$person = $this->Product->find('first', array(
  'conditions' => array(
    'Product.id' => 1 // or any other condition
  ),
  'fields' => array(
    'Person.first_name',
    'Person.last_name'
  )
));

这里发生了什么?

首先,我们解除产品模型与艺术家模型的关系。

其次,我们通过显式定义关系并禁用Cake的自动forigenKey连接来绑定 Artist Person 模型。

最后,我们对产品模型进行“首次”查找,并仅请求' first_name '& last_name

答案 1 :(得分:-1)

每个“产品”属于“艺术家”,每个“艺术家”都有和明天的“产品” 您还需要下表:

artists_products
****************
id
product_id
artist_id

http://book.cakephp.org/#!/view/1044/hasAndBelongsToMany-HABTM