任何人都可以告诉我从数据库中做什么的最佳方法是
Table 1
-id
-data
-foreign_key_id_table2
Table 2
-id
-data
-foreign_key_id_table3
Table 3
-id
-data
我需要选择表格1的所有项目,这些项目链接到给定表格3条目的表2中的所有项目
之类的东西select table1.data from table1 where table1.foreign_key_id_table2 in (select table2.id from table2 where table2.foreign_key_id_table3 = X)
但我需要用cakephp做到这一点,因为我是新手,我无法弄清楚如何
请帮助:)
答案 0 :(得分:4)
好的,我会尝试帮助“教一个人如何捕鱼”。
Cake模型代表数据库表。每个模型都可以定义associations,例如belongsTo,hasMany,hasOne等。当您定义关联时,蛋糕会识别它并获取您需要的所有相关数据。
例如,假设你有一个模型Post和一个模型Comment。如果你在它们之间建立了一个关联(Post-hasMany-Comment和Comment-belongsTo-Post),那么每次你做post-> find()或Comment-> find()时,蛋糕都会起作用。 p>
那是什么意思?如果您这样做:
$ data = $ this->帖子> findByTitle('你的帖子标题');
$ data变量不仅包含Post数据,还包含所有相关注释。您可以通过致电debug($data);
可以使用recursive属性/参数或使用内置的Containable行为来设置相关数据的“深度”蛋糕级别。
定义模型之间的关联(回答你对Rob的回答的评论)的另一个好处是你不需要将所有模型都放在$ uses var中。事实上,这是错误的做法。
信不信由你,但是一旦你正确地定义了你的关联,这将有效:
class PostsController extends AppController
{
// not really needed, cake detects it automagically
var $uses = array('Post');
function index()
{
$comments = $this->Post->Comment->find('all');
}
}
很好,不是吗?
在你的情况下,它会是这样的:
$this->Table1->find
(
'all',
array
(
'conditions' => array
(
'Table2.foreign_key_id_table3' => X
)
)
);
当你使用蛋糕的内置功能和课程时,还有很多其他有用的提示,所以我建议你花一些时间来正确学习蛋糕,它会让你的生活更轻松。
答案 1 :(得分:3)
我建议将Cake的find()
方法用于模型。您所要做的就是创建适当的模型关联,Cake将为您完成工作。在您的情况下,它看起来像Table1模型belongsTo
Table2和Table2 belongsTo
表3。
表2将与Table1建立hasOne
或hasMany
关系,表3与Table2具有相同的关系。
要提供真实世界的场景,请考虑无处不在的博客应用程序。 User
可以创建Posts
而Post
可以有多个Comments
:
<强>数据库强>
users - id - data posts - id - user_id - data comments - id - post_id - data
User
模型
class User extends AppModel { $hasMany = array ( 'Post' ); // ... }
Post
模型
class Post extends AppModel { $hasMany = array ( 'Comment' ); $belongsTo = array ( 'User' ); // ... }
Comment
模型
class Comment extends AppModel { $belongsTo = array ( 'Post' ); // ... }
一旦你有了关联,只需调用你感兴趣的任何对象的find()
方法,Cake也会返回其他类的相关记录。