У меня есть 2 модели: - models/Users.php - models/Posts.php
Пользователи имеют:
$this->hasMany('id', 'Posts', 'id_user');
Сообщений:
$this->belongsTo('id_user', 'Users', 'id');
и это прекрасно.
Можно ли создать поиск с использованием phalcon ORM?
Я знаю, что могу это сделать (с левым, внутренним и т.д.):
$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
максимальной производительности вы должны использовать 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);
}
Дело в том, что для большего количества пользователей в таком случае, например, при подаче на пользователей, а не при удалении сообщений, движок отправляет отдельный запрос, что может сильно затронуть сервер в зависимости от ситуации. Здесь у вас есть немного больше в теме.