2016-10-12 8 views
0

У меня есть эта ERD ниже:Phalcon Фатальная ошибка на hasMany отношениях

enter image description here

Relations are as follow, Entity to Host is One to One Host to Portal is One to Many (One Host to Many Portal)

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" 
     ); 
    } 
} 

Когда я пытаюсь получить список порталов базы на массиве объекта идентификатор, я получил фатальная ошибка.

Fatal error: Call to undefined method 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 условия. Но я действительно удивляюсь, что не так с моими отношениями модели, которые приводят к фатальной ошибке.

+0

Где вы используете 'getHost()'? – Timothy

ответ

-1

метод Find возвращает Resultset, вам необходимо либо использовать findFirst или выберите строку из Resultset (как массив типа стиля $portals[0] или $portals->getFirst() или $portals->offsetGet('0')

+0

Не правда ли findFirst, выберет только первую найденную строку? Это не сработает, потому что мне нужен список базы данных порталов на entity_id – user1149244

+0

Подтвержден, firstFirst будет только извлекать первую найденную строку. Он не будет извлекать все найденные строки. – user1149244

+0

Тогда он не будет работать так: $ hostObj - это результат. Вам нужно выбрать строку из него. Вам нужно использовать построитель запросов, чтобы вы хотели, чтобы вы скорее всего. Несмотря на это, ваши отношения неверны. Docs. BelongsTo первый аргумент - поле в текущей модели, второй - родственный класс, третий - поле в ** родственной модели **. Для hasMany это то же самое. Я не вижу в поле «portal_id» поле «portal_id». – Juri