[英]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.