【问题标题】:Phalcon Fatal Error on hasMany RelationshiphasMany 关系上的 Phalcon 致命错误
【发布时间】:2016-10-12 14:59:39
【问题描述】:

我在下面有这个 ERD:

关系如下, 托管实体是一对一的 主机到门户是一对多(一台主机到多门户)

class Entity extends Model
{
    public function initialize()
    {
        $this->hasOne(
            "entity_id",
            "Host",
            "entity_id"
        );
    }
}

class Host extends Model
{
    public function initialize()
    {
        $this->belongsTo(
            "entity_id",
            "Host",
            "entity_id"
        );
        $this->hasMany(
            "host_id"
            "Portal",
            "host_id"
        );
    }
}
class Portal extends Model
{
    public function initialize()
    {
        $this->belongsTo(
            "portal_id",
            "Host,
            "portal_id"
        );
    }
}

当我尝试根据提供的实体 id 数组检索 Portal 列表时,出现致命错误。

致命错误:调用未定义的方法 Phalcon\Mvc\Model\Resultset\Simple::getHost()

这是我检索门户的控制器代码

$hostObj = Host::find(['entity_id IN ({ids:array})',
             'bind' => array('ids' => $entity_id)]);

if($hostObj)
{
    $portals = $hostObj->Portal;
}

基本上,目标是根据提供的 entity_id 数组检索 Portal 列表。但我真的很想知道,导致致命错误的模型关系有什么问题。

【问题讨论】:

  • 你在哪里使用getHost()

标签: orm model entity-relationship phalcon has-many


【解决方案1】:

Find 方法返回结果集,您需要使用findFirst 或从Resultset 中选择行(类似于数组样式$portals[0],或$portals->getFirst()$portals->offsetGet('0')

【讨论】:

  • 不是findFirst,只会获取找到的第一行吗?它不起作用,因为我需要基于 entity_id 的 Portal 列表
  • 确认了,firstFirst 只会获取找到的第一行。它不会获取找到的所有行。
  • 那么它不会像这样工作。 $hostObj 是结果集。您需要从中选择行。您需要使用查询构建器来做最有可能想要的事情。尽管如此,你的关系是错误的。检查文档。 BelongsTo 第一个参数是当前模型中的字段,第二个是相关类,第三个是相关模型中的字段。对于 hasMany 来说也是一样的。我在 Host 中没有看到 portal_id 字段。
猜你喜欢
  • 2014-09-14
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多