2011-07-28 6 views
0

最近CakePHPで実験を始めました。私は "普通の" PHPでこのクエリを使用し、それをCakePHP findに変換する必要があります。しかし、私はそれを動作させるように見えることはできません!cakePHPのサブクエリで他のテーブルを検索する

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

2台のテーブル、ユーザー、および製品を持つ基本的なセットアップです。すべての製品がユーザーによって作成され、ユーザーの名前と製品情報をロードする必要があります。 (だから私は、ユーザー名だけでなく、ユーザーIDを表示することができます。

任意の考えは?

答えて

2

あなたは関係が正しく設定されている場合:

$this->Product->find(
    'first', 
    array(
     'conditions' => array(
      'Product.id' => 2 
     ), 
     'fields' => array(
      'Product.*', 
      'User.name' 
     ), 
     'recursive' => 1 
    ) 
); 
+0

キープ'警告'(512):SQLエラー:1051:不明なテーブル 'ユーザ' [CORE/cake/libs/model/datasources/dbo_source.php、684行目] ' – BloodPhilia

+0

これを今すぐ入手してください!ありがとう! :D名前が間違っていた... – BloodPhilia

1

は、なぜあなたはサブクエリが必要なのでしょうか?

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

とにかくサブクエリがDOC

Complex Find Conditionsを読ん作るために

幸運は

0

また、規則はあなたがそのフィールド名を維持したい場合は、あなたがそうのようなあなたの関係で正しいフィールドを指定することができ、外部キーが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') 
    ); 
} 
+0

私は実際に列の偽の名前を使用してケースを作ったが、感謝;) – BloodPhilia

関連する問題