Phalcon - поиск с объединениями

1

У меня есть 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();

Благодарим за продвижение

Теги:
orm
search
phalcon
models

1 ответ

1
Лучший ответ

Для 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);
}

Дело в том, что для большего количества пользователей в таком случае, например, при подаче на пользователей, а не при удалении сообщений, движок отправляет отдельный запрос, что может сильно затронуть сервер в зависимости от ситуации. Здесь у вас есть немного больше в теме.

  • 0
    Я имею в виду что-то другое. Можно создать запрос как; ВЫБРАТЬ * ОТ ПОЛЬЗОВАТЕЛЕЙ u ЛЕВЫЕ ОБЪЕДИНЯЮТСЯ ПУНКТЫ p ON u.id = p.id_user INNER JOIN bouns b ON u.id = b.id_user WHERE u.active = '1' AND b.curdate> '2015-02-21' ЗАКАЗАТЬ BY.ID ASC, p.id ASC; в ORM без построителя запросов и executeQuery ()?
  • 0
    Нет. Поэтому я предоставил вам ссылку, чтобы ответить с примером того, как это сделать с помощью QueryBuilder, потому что это именно тот инструмент, который предназначен для решения этих задач.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню