php - 使用 Phalcon ORM 在相关表中查找数据

标签 php mysql pdo orm phalcon

我可以像这样使用 Phalcon ORM 在相关表上查找数据吗?

SELECT * 
FROM user 
LEFT JOIN media_manager ON media_manager.user_id = user.id
WHERE media_manager.upload_date > '2017-01-01';

以前我在 Phalcon ORM 中使用过它

$data = User::find();
foreach($data as $row){
    $data->MediaManager->file_location
}

但我不知道如何在 MediaManager 中查找数据,如上面的 PDO。

最佳答案

我认为 Phalcon ORM 不够强大,无法让您在 find 的条件部分指定此类内容,除非您通过添加 来构建此类内容>leftJoin 一路上所以条件可以引用它。关于模型的 initialize 中发生的事情以及调整 Phalcon 以满足您的需要,您可能会有点喜欢 hack,但是 ORM 会在 PHP 中循环它,而不是通过查询来执行此操作。 ORM 不是 SQL 的替代品,我强烈建议在 SQL 中执行此类操作,而不是在 PHP 中循环执行。

我个人会通过向您的模型添加一个新的静态方法来解决这个问题,您可以通过允许 leftJoins 以特殊方式“查找”。这对我来说是一个很好的解决方案:How to run RAW SQL query in PhalconPHP 然后您只需在那里调整查询并放置一个 LEFT JOIN。

换句话说:

<?php

use Phalcon\Mvc\Model\Resultset\Simple as Resultset;

class User extends Phalcon\Mvc\Model
{
    public static function advancedFind($conditions = 1, $params = null)
    {
        $sql = "SELECT u.*,m.* FROM user u LEFT JOIN media_manager m ON m.user_id = u.id
                WHERE $conditions";

        // Base model
        $user = new User();

        // Execute the query
        return new Resultset(null, $user, $user->getReadConnection()->query($sql, $params));
    }
}  

然后你会做类似的事情:

$data = User::advancedFind("m.upload_date > '2017-01-01'");

关于php - 使用 Phalcon ORM 在相关表中查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47972072/

相关文章:

php - 从表 1 中获取行并从表 2 中创建或更新列

php - 如何比较两个数组并在列中显示匹配项

mysql - 用于收集不同登录信息的子 SQL 查询

mysql - MariaDB 每天因内存问题崩溃一次——分配更多内存并不能解决问题

PHP PDO,连接持续时无法设置名称?

php - 通过 PDO+mySQL 排序不起作用

javascript - 通过查询字符串传递变量 chop 加号

php - 分离的数据服务器、内容服务器、客户端服务器和后端服务器

php - 问题让读/写拆分与 PHP mysqlnd_ms 一起使用

php - 使用 GET 语句插入语句不起作用