2013-11-20 4 views
0

Нет ли способа доступа к экземпляру модели как объекта (в отличие от массива) в методе модели в CakePHP? В супер-упрощенный пример, мой инстинкт подсказывает мне, что это должно быть возможно сделать что-то вроде этого:Вызов метода модели с контроллера в CakePHP

Bird.php 
... 
public function specialName() 
{ 
    $name = $this->name; 
    return "Oh wow! It's ".$name; 
} 

Если я называю этот метод из моего BirdController.php так:

public function view($id) { 
    if (!$id) { 
     throw new NotFoundException(__('Invalid bird')); 
    } 

    $this->Bird->id = $id; 
    $this->set('results', $this->Bird->specialName()); 
} 

. Затем он отображает в файле вида «О, вау! Это птица», а не «О, вау! Это Фредди» (то есть имя модели, а не имя экземпляра модели).

Я пробовал варианты этого общего подхода, но безрезультатно. Кажется, я должен получить доступ к информации с помощью массива, например, так:

Bird.php 
... 
public function specialName($id) 
{ 
    $data = $this->findById($id); 
    $name = $data['Bird']['name']; 
    return "Oh wow! It's ".$name; 
} 

Это кажется WAY слишком сложным для меня. Что мне не хватает? В конечном итоге я хочу иметь доступ к зависимым моделям в моей модели, например. получить все связанные с ним Bird-> Подвиды. Похоже, что было бы намного проще работать с объектами.

ответ

0

Если бы вы прочитали документацию о моделях, вы бы знали, что Model :: $ name - это имя модели. Существует также Model :: alias, который является именем модели, когда к ней обращаются корыта ассоциаций, и ассоциация называется отличной от имени модели.

Торты ORM не возвращают результаты как объекты данных, 3.0 сделают это. Самый простой способ вернуть поле, специфическое прямо сейчас, чтобы сделать это в модели:

public function specialName($id) { 
    $this->id = $id; 
    return $this->field('name'); 
} 

Также «О, ничего себе ...» должен перейти к просмотру, где вы хотели бы повторить имя, которое вы установили в $ результат.

Если вам нужны объекты данных, я знаю, что есть плагин, поведение, которое превратит результирующие наборы в объекты данных. Просто пойдите в Google.

В конечном счете, я хочу иметь доступ к зависимым моделям в модели , например. получить все связанные с ним Bird-> Подвиды.

Вы прочитали книгу? See this section. With containable вы можете контролировать, что именно вы хотите получить из связанных моделей.

Я рекомендую сначала сделать учебное пособие по блогу, чтобы получить представление об основах работы CakePHP.

+1

Hi burzum. Спасибо, что нашли время для решения моего вопроса. Да, я потратил немало времени на чтение документации, и я сделал учебник для блога. Я понимаю, как создавать связанные модели; мой вопрос заключался в том, как лучше всего получить доступ к данным. Основываясь на моем опыте работы с другой инфраструктурой PHP, я ожидал, что результаты вернутся как объекты данных, но вы подтвердили, что это невозможно в текущей версии Cake без использования плагина. – codebird

Смежные вопросы