2011-12-15 1 views
0

SimpleTesting-PDOException:SQLSTATE [42S02]ビューの編集リビジョンは、私はモジュールの開発の過程で午前SimpleTesting-PDOException:SQLSTATE [42S02]

、こんにちはすべて10:56時に2011年12月15日にichionid投稿。私は私のコードテストを含む別の場所を持つためにSimpleTestモジュールを組み込もうとしています。私は私が構築されているデータベース内のテーブルに対するクエリを実行しようとすると

はしかし、私が取得: PDOException:SQLSTATE [42S02]:ベーステーブルまたはビューが見つかりません:1146テーブル「遊び場。 simpletest311135TABLENAME

テーブルsimpletest311135TABLENAMEを見つけようとしていますが、TABLENAMEを探す必要があります。それは常に簡単なものと乱数を追加します。

ユーザーやセッションのようなdrupalのデフォルトテーブルに対してクエリを実行すると、すべてが完璧に機能します。回避策はありますか?

Giannis


実際の機能は

function dlm_job_finished($jobId,$urls,$messageFromFS){ 
    $query = db_select('users','u'); 
    $query -> fields('u',array('uid')); 
    $d_alias = $query->innerJoin('dlm_user_auth_entities','d','%alias.uid = u.uid'); 
    $query -> condition("{$d_alias}.jid",$jobId); 
    $result = $query->execute(); 
    $message = variable_get('dlm_settings_email_message').'<br />'; 
    foreach ($result as $record) { 
     foreach ($urls as $file_url_to_download){ 
     $message.= '<a href="'.$file_url_to_download.'">'.$file_url_to_download.'</a> <br /> '; 
     } 
     $message.=$messageFromFS.'<br />';  
     dlm_mail_notifier($record->uid,$message); 
    } 
    } 

テスト機能は次のとおりです。テストクラス内

class DlmTestCase extends DrupalWebTestCase{ 

    public function setUp(){ 
    parent::setUp('dlm'); 
    } 

    public function testDlmJobFinished(){ 
     $info = module_invoke(
        'dlm', 
        'job_finished', 
        'awsedrfvcxzsdfrtawsedrfvcxzsdfrt', 
        array(
        'http://media.holkeydonkey.com/download/frehvf64fdsffdf.zip', 
        'http://media.marioBos.com/download/12.zip', 
       ), 
        "additional message!" 
       ); 
     } 
} 

私は仕事がそのもので作られた唯一の機能デフォルトのdrupalデータベーステーブルを照会します。また、上記の関数が動作していて、私は別の方法で呼び出され、うまくいきました。問題は、Drupalの簡単なテストモジュールで動作させることができないということです。

+0

このエラーの原因となっている特定のコード行を投稿できますか? – Clive

+0

上記の編集バージョンをご覧ください! –

答えて

0

私が誤解していたら謝罪しますが、単純な内部結合でクエリを実行しようとしていると思いますか?ので、あなたの構文が間違っている場合、それは次のようになります。

$query = db_select('users','u') 
    ->fields('u',array('uid')) 
    ->condition('d.jid', $jobId); 

$query->innerJoin('dlm_user_auth_entities', 'd', 'd.uid = u.uid'); 

$results = $query->execute(); 

を問題は、あなたの条件である:

`$query -> condition("{$d_alias}.jid",$jobId);` 

にあなたのエイリアス名として使用している$d_aliasに割り当てられた変数(上記の条件)が、エイリアスの文字列表現を返さない$query->innerJoin()から返された場合、オブジェクトを返します。クエリで取得しているテーブル名は、そのオブジェクトの文字列表現(simpletest311135)です。

innerJoin()という2番目の引数を使用すると、残りのクエリで結合テーブルが認識される別名になります。したがって、上記の例のように->condition('d.jid', $jobId)を使用することができます。

希望すること

+0

ヒントありがとうございました;)エイリアスを使用するための参照が私のやり方では見つかりませんでしたが、可能なときに提供します!残念ながら、私は同じ応答を得る。私は答えが見つかった場合、または何か提案があれば歓迎します! –

関連する問題