Php 在具有名称空间的Phalcon中使用相关模型
我一直在和法尔康一起工作,慢慢地开始处理它。然而,我偶然发现了一个问题,这让我感到困惑。我希望其他人能提供一些帮助 我在数据库中有两个表,它们作为一对多关联。客户端->站点。以下是Phalcon中模型的两个定义:Php 在具有名称空间的Phalcon中使用相关模型,php,namespaces,models,phalcon,table-relationships,Php,Namespaces,Models,Phalcon,Table Relationships,我一直在和法尔康一起工作,慢慢地开始处理它。然而,我偶然发现了一个问题,这让我感到困惑。我希望其他人能提供一些帮助 我在数据库中有两个表,它们作为一对多关联。客户端->站点。以下是Phalcon中模型的两个定义: #File: CrmClients.php namespace CRM\Models; use Phalcon\Mvc\Model\Resultset\Simple as Resultset; class CrmClients extends \Phalcon\Mvc\Model {
#File: CrmClients.php
namespace CRM\Models;
use Phalcon\Mvc\Model\Resultset\Simple as Resultset;
class CrmClients extends \Phalcon\Mvc\Model
{
public id;
public function initialize()
{
$this->hasMany("id", "CRM\Models\CrmSites", "client_id", array("alias" => "Sites"));
}
}
#File: CrmSites.php
namespace CRM\Models;
class CrmSites extends \Phalcon\Mvc\Model
{
public id;
public client_id;
public function initialize()
{
$this->belongsTo("client_id", "CRM\Models\CrmClients", "id", array("foreignKey" => true, "alias" => "Clients"));
}
}
在控制器中,我有:
$profile = Clients::findFirstById($id);
$sites = $profile->Sites;
当我运行此命令时,会出现以下错误:
注意:访问第51行\html\apps\CRM\controllers\clientscocontroller.php中未定义的属性CRM\Models\CrmClients::Sites
我不知道我在这里做错了什么,任何帮助都将不胜感激
如果您有任何问题,或需要任何澄清,请直接提问
提前感谢您的帮助。您忘记了CrmClients模型中hasMany()方法中的第三个参数 您的代码如下所示:
$this->hasMany("id", "CRM\Models\CrmSites", array("alias" => "Sites"));
应该是这样的:
$this->hasMany("id", "CRM\Models\CrmSites", 'client_id', array("alias" => "Sites"));
在我看来,这可能与您在经过大量审查和Phalcon论坛的帮助后得到的错误有关。。据了解,代码没有问题 问题归结为一个“用户错误”,因为我在两个单独的模块中有两个CrmClients.php文件的副本。我在错误的文件夹中编辑了CrmClients,因此带有CrmSites.php的CrmClients.php文件根本没有初始化函数-可能是它找不到关系的原因 因此,我添加了initialize函数,它工作得非常好 @digitronic:非常感谢您在这方面的帮助
再次感谢。感谢您的回复。我的道歉;在将其从源文件转录到已删除参数的站点时。这在我的代码中,但仍然不起作用。我已经更新了我的原始帖子以适应。您是否可以尝试使用$profile->getRelated('Sites')而不是$profile->Sites,这可能会给您带来更多描述性错误这将消息更改为以下内容:
使用别名“Sites”的模型“CRM\Models\CrmClients”没有定义关系
我无法确定“initialize()”是否正确方法正在被调用。有没有我可以检查的地方?奇怪。。。我和你一样使用名称空间和定义关系,从来没有遇到过问题。唯一的区别是我使用小写的别名。仔细检查参数的顺序是否正确(id/客户端id),除此之外,我一无所知