Использование связанных моделей в Phalcon с пространствами имен

Я работал с Phalcon и постепенно осваивал его. Тем не менее, я наткнулся на проблемы, и это поставило меня в тупик. Я надеюсь, что кто-то еще может оказать некоторую помощь.

У меня есть две таблицы в БД, которые связаны как один ко многим. клиенты->сайты. Вот два определения моделей в Phalcon:

#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;

Когда я запускаю это, я получаю следующую ошибку:

Примечание. Доступ к неопределенному свойству CRM\Models\CrmClients::Sites в \html\apps\crm\controllers\ClientsController.php в строке 51.

Я в недоумении относительно того, что я делаю неправильно здесь, и любая помощь будет принята с благодарностью.

Если у вас есть какие-либо вопросы или вам нужны какие-либо разъяснения, пожалуйста, просто спросите.

Заранее благодарны за Вашу помощь.


person rabrowne    schedule 05.08.2014    source источник


Ответы (2)


После долгих обзоров и некоторой помощи с форумов Phalcon. Выяснилось, что с кодом все в порядке.

Проблема сводилась к "ошибке пользователя" в том, что у меня было две копии файла CrmClients.php в двух отдельных модулях. Я редактировал CrmClients в неправильной папке, и поэтому файл CrmClients.php с CrmSites.php вообще не имел функции инициализации - возможно, поэтому он не находил отношения...

Таким образом, я добавил функцию инициализации, и она отлично работает.

@digitronic: очень ценю помощь в этом.

Спасибо еще раз.

person rabrowne    schedule 07.08.2014

Вы забыли третий параметр в методе hasMany() в модели CrmClients.

ваш код выглядит так:

$this->hasMany("id", "CRM\Models\CrmSites", array("alias" => "Sites"));

и должно быть так:

$this->hasMany("id", "CRM\Models\CrmSites", 'client_id', array("alias" => "Sites"));

мне кажется, что это может быть связано с ошибкой, которую вы получаете...

person digitronac    schedule 05.08.2014
comment
Спасибо за ответ. Мои извенения; при переписывании его с источника на сайт, полученный параметр был удален. Это в моем коде, и он все еще не работает. Я обновил свой оригинальный пост, чтобы он подходил. - person rabrowne; 05.08.2014
comment
не могли бы вы попробовать использовать $profile-›getRelated('Sites') вместо $profile-›Sites , это может дать вам более описательную ошибку - person digitronac; 06.08.2014
comment
это меняет сообщение на следующее: There is no defined relations for the model "CRM\Models\CrmClients" using alias "Sites" - person rabrowne; 06.08.2014
comment
Я не могу быть уверен, что вызывается метод initialize(). Можно ли как-то проверить, так ли это? - person rabrowne; 06.08.2014
comment
странно ... я использую пространства имен и определяю отношения так же, как и вы, и у меня никогда не было проблем. единственная разница в том, что я использую псевдоним в нижнем регистре. дважды проверьте правильность порядка параметров (id/client_id), кроме того, что я не знаю - person digitronac; 07.08.2014
comment
Я попытался перейти на псевдонимы в нижнем регистре, но не изменился. Спасибо за вашу помощь. - person rabrowne; 07.08.2014