Phalcon: Модель отношений с пространствами имен

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

У меня есть эти две модели (они урезаны):

<?php

namespace My\App\V1\Models;

class Movies extends \My\Namespace\Path\Base
{
}

?>



<?php

namespace My\App\V1\Models

class Genres extends \My\Namespace\Path\Base
{
    public function initialize()
    {
        $this->hasMany('id', 'Movies', 'genre_id');
    }

    public function howManyMovies()
    {
        return $this->countMovies();
    }
}

?>

Итак... как есть, это даст мне:

Cannot redeclare class My\App\V1\Models\Movies ....

Итак, я начал думать, что это как-то связано с пространствами имен. Итак... я меняю hasMany на:

$this->hasMany('id', 'My\\App\\V1\\Models\\Movies', 'genre_id');

Я могу поставить обратную косую черту перед «Моим» или нет, но в любом случае я получаю:

The method "countMovies" doesn't exist on model "My\App\V1\Models\Genres"

Я пытаюсь изменить эту строку на:

return $this->countMyAppV1ModelsMovies();

... что довольно многословно, но что угодно. Я все еще получаю сообщение об ошибке "метод не существует".

Что мне не хватает?


person Mr Mikkél    schedule 31.10.2014    source источник


Ответы (1)


ХОРОШО. После долгих попыток понять это, а затем через 5 минут после публикации я понял....

Необходимо использовать псевдоним:

$this->hasMany('id', 'My\\App\\V1\\Models\\Movies', 'genre_id', ['alias'=>'Movies']);

Я оставлю это здесь для тех, кому это может понадобиться.

person Mr Mikkél    schedule 31.10.2014
comment
Это именно то, с чем я столкнулся сегодня. Спасибо. Для всех остальных, попробуйте это, это работает - person Hoang Trinh; 06.04.2015
comment
Мне потребовались часы, чтобы понять это! Я сделал то же самое для каждого hasMany, ownTo и hasManyToMany, и это решило все мои проблемы :) - person user1855153; 17.06.2015