CakePHP - только один запрос от внешней модели - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть две модели:

class Post extends AppModel {
    var $name = 'Post';
    var $belongsTo = array(
        'User' => array(
            'className' => 'User', 
            'foreignKey' => 'user_id'
        )
    );      
}

и

class User extends AppModel {
    var $name = 'User';
    var $hasMany = 'Post';
}

Теперь у меня проблема с запросом в PostsController. У меня есть add() функция и представление add.ctp, которое в основном является формой. Теперь я хотел бы показать некоторую информацию о пользователе в этой форме.

class PostsController extends AppController {
    var $name = 'Posts';
    var $helper = array('Html', 'Form');
    var $uses = array('User');

    public function index() {
        $this->set('posts', $this->Post->find('all'));
    }

    function add() {
        $user_id = 1;
        $this->set('user', $this->User->findById($user_id));
        if ($this->request->is('post')) {
            if ($this->Post->save($this->request->data)) {
                $this->Session->setFlash('Your post has been saved.');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('Unable to add your post.');
            }
        }
    }
}

Но теперь страница add-view показывает, что фактически запущены два запроса. Так что, если я print_r($user) в add-view, я получаю массив с двумя массивами. Один для поста с user_id = 1 и один для реального пользователя с id = 1. Но я бы хотел получить только идентификатор пользователя = 1.

1 Ответ

2 голосов
/ 02 апреля 2012

Попробуйте установить recursive на false на модели User, прежде чем вызывать findById, чтобы вы не получили никаких данных от связанных моделей.Как это:

function add() {
    $user_id = 1;
    $this->User->recursive = false;
    $this->set('user', $this->User->findById($user_id));
    if ($this->request->is('post')) {
        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash('Your post has been saved.');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Unable to add your post.');
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...