使用 Phalcon ORM 在相关 table 中查找数据
Find data in related table using Phalcon ORM
我可以像这样使用 Phalcon ORM 找到相关 table 的数据吗?
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
的条件部分指定此类内容,除非您通过添加 [=13] 来构建此类内容=] 一路这样的条件可以参考一下。关于模型 initialize
中发生的事情并调整 Phalcon 以满足您的需要,您可能会有点喜欢黑客,但 ORM 会在 PHP 中循环它,而不是通过查询来执行此操作。 ORM 不是 SQL 的替代品,我强烈建议在 SQL 中做这种事情,而不是在 PHP 中循环它。
就我个人而言,我会通过向您的模型添加一个新的静态方法来解决这个问题,您可以通过允许 leftJoins 以一种特殊的方式 "find"。这对我来说是个不错的解决方案: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'");
我可以像这样使用 Phalcon ORM 找到相关 table 的数据吗?
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
的条件部分指定此类内容,除非您通过添加 [=13] 来构建此类内容=] 一路这样的条件可以参考一下。关于模型 initialize
中发生的事情并调整 Phalcon 以满足您的需要,您可能会有点喜欢黑客,但 ORM 会在 PHP 中循环它,而不是通过查询来执行此操作。 ORM 不是 SQL 的替代品,我强烈建议在 SQL 中做这种事情,而不是在 PHP 中循环它。
就我个人而言,我会通过向您的模型添加一个新的静态方法来解决这个问题,您可以通过允许 leftJoins 以一种特殊的方式 "find"。这对我来说是个不错的解决方案: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'");