【问题标题】:Find data in related table using Phalcon ORM使用 Phalcon ORM 在相关表中查找数据
【发布时间】:2017-12-25 21:14:37
【问题描述】:

我可以像这样使用 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
}

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

【问题讨论】:

    标签: php mysql pdo orm phalcon


    【解决方案1】:

    我认为 Phalcon ORM 的功能不足以让您在 find 的条件部分中指定此类内容,除非您通过添加 leftJoin 来构建此类内容,所以条件可以参考一下。您可以对模型initialize 中发生的事情有所了解,并调整 Phalcon 以满足您的需求,但 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'");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多