我有2个型号: - models / Users.php - models / Posts.php
用户有:
$this->hasMany('id', 'Posts', 'id_user');
帖子有:
$this->belongsTo('id_user', 'Users', 'id');
这很好。
可以使用phalcon ORM创建搜索吗?
我知道我可以这样做(使用leftjoin,innerjoin等):
$this->modelsManager->executeQuery($sql_with_joins, $bind_array);
或使用queryBuilder,如:
...
->columns('id, name')
->from('Users')
->join('Posts)
...
->orderBy('name')
但是如何使用ORM构造创建搜索:
Users::find( .. here join and search on Posts model fields .. )->toArray();
感谢您提前
答案 0 :(得分:1)
您应该使用queryBuilder
以获得最佳效果。无论如何,如果你将你的关系别名并坚持使用对象而不是数组,你就可以制作一些技巧:
// in users model
$this->belongsTo(
'id', // local id
'Posts', // model relation
'user_id', [ // related id
'alias' => 'posts' // alias for related records
]
);
$user = Users::findFirst(); // first user from table, just for example
// foreach($user->posts as $post) // using exact alias name
foreach($user->getPosts() as $post) { // using getter for alias
var_dump($post);
}
事情是,对于这种情况下的更多用户,例如在预告用户而不是通过帖子进行预告时,引擎会发送单独的查询,这可能会给服务器带来很多压力,具体取决于具体情况。 Here你还有更多主题。