繁体   English   中英

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

[英]Find data in related table using Phalcon ORM

我可以像这样使用 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 中查找数据。

我认为 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'");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM