我正在为美术馆开发一个网络应用程序,我想检查一下我是否正确设置了数据模型。
我有一个people
表和一个artists
表。有些people
是artists
,有些则不是。{/ p>
我还有一个products
表,每个product
属于一个artist
。
以下是表格的简化版本:
products
********
id
title
artist_id
artists
*******
id
profile
rating
person_id
people
******
id
first_name
last_name
我需要能够在find()
模型上执行Product
方法时检索艺术家的名字。
我是否正确设置了数据模型?如果是,那么在不获取大量不需要的数据的情况下检索艺术家姓名的最佳方法是什么?
答案 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