Подзапрос в cakePHP для поиска в другой таблице - PullRequest
0 голосов
/ 28 июля 2011

Я недавно начал экспериментировать с CakePHP. Я использовал этот запрос в «нормальном» PHP и мне нужно преобразовать его в CakePHP find. Однако я не могу заставить его работать!

SELECT *, 
(SELECT name FROM `users` WHERE `users`.`id`=`products`.`creator`) AS creatorname 
FROM `products` 
WHERE `products`.`ID`='2'

Это базовая установка с 2 таблицами, пользователями и продуктами. Каждый продукт создается пользователем, и мне нужно загрузить имя пользователя вместе с информацией о продукте. (Таким образом, я могу отображать имя пользователя, а не только идентификатор пользователя.

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

Если у вас правильно настроены отношения:

$this->Product->find(
    'first',
    array(
        'conditions' => array(
            'Product.id' => 2
        ),
        'fields' => array(
            'Product.*',
            'User.name'
        ),
        'recursive' => 1
    )
);
1 голос
/ 28 июля 2011

зачем вам подзапрос?

SELECT Product.*, User.name
FROM products as Product INNER JOIN users as User on (User.id = Product.creator)
WHERE Product.id = 2

в любом случае, чтобы подзапросы прочитали Сложные условия поиска в документе

Удачи

0 голосов
/ 28 июля 2011

Кроме того, согласно соглашениям, внешний ключ должен быть user_id (а не creator), но, если вы хотите сохранить это имя поля, вы можете указать правильное поле в ваших отношениях следующим образом:

class Product extends AppModel {
    public $belongsTo = array(
        'User' => array('foreign_key' => 'creator')
    );
}

class User extends AppModel {
    public $hasMany = array(
        'Product' => array('foreign_key' => 'creator')
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...