Phalcon - 使用连接搜索
Phalcon - search with joins
我有两个型号:
- 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();
感谢提前
您应该使用 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);
}
事实是,在这种情况下,对于更多用户,例如当对用户进行 foreaching 而不是对帖子进行 foreaching 时,引擎会发送单独的查询,这可能会给服务器带来很大压力,具体取决于情况。 你的话题有点多了。
我有两个型号: - 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();
感谢提前
您应该使用 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);
}
事实是,在这种情况下,对于更多用户,例如当对用户进行 foreaching 而不是对帖子进行 foreaching 时,引擎会发送单独的查询,这可能会给服务器带来很大压力,具体取决于情况。