【问题标题】:Phalcon - search with joinsPhalcon - 使用连接搜索
【发布时间】:2015-07-06 19:23:52
【问题描述】:

我有 2 个模型: - 模型/Users.php - 模型/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();

感谢提前

【问题讨论】:

    标签: php search orm models phalcon


    【解决方案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你有更多的话题。

    【讨论】:

    • 我的意思是别的。可以创建类似的查询; SELECT * FROM users u LEFT JOIN posts 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' ORDER通过 u.id ASC、p.id ASC;在没有查询生成器和 executeQuery() 的 ORM 中?
    • 没有。因此,我为您提供了一个链接,以回答如何使用 QueryBuilder 执行此操作,因为它正是为解决这些问题而提供的工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多