2011-01-31 1 views
0

私はこれをMVCフレームワーク、特にCakePHPでどのように使うのだろうと思います。CakePHP:MVCのような構造体でSQLクエリ文を使用する方法

$query = oci_parse($c, "SELECT * FROM JOB ORDER BY job_title"); 
         oci_execute($query); 

         while($row = oci_fetch_assoc($query)){ 
          $showRowJ .= "<tr>\n"; 
          $showRowJ .= "<td><a href = 'job_delete.php?jobid=".$row['JOB_ID']."'> Delete </a></td>\n"; 
          $showRowJ .= "<td><a href = 'job_update.php?jobid=".$row['JOB_ID']."'> ".$row['JOB_ID']." </a></td>\n"; 
          $showRowJ .= "<td>".$row['JOB_TITLE']."</td>\n"; 
          $showRowJ .= "<td>".$row['REQUEST_DATE']."</td>\n"; 
          $showRowJ .= "<td>".$row['START_DATE']."</td>\n"; 
          $showRowJ .= "<td>".$row['NUMBER_OF_DAYS']."</td>\n"; 
          $showRowJ .= "<td>".$row['STATUS']."</td>\n"; 
          $showRowJ .= "<td>".$row['CLIENT_ID']."</td>\n"; 
          $showRowJ .= "</tr>\n"; 
          } 

とMySQLの場合:(例)

$result = mysql_query('SELECT * WHERE 1=1'); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

私はいくつかは、それがモデルにする必要があり、いくつかの検索を( 'すべて')を使用していると言う混乱している

更新:

こんにちは私はジョイントテーブルを照会したいと思っていました。上記は、テーブルを結合するためにWHERE 2-3回を含める必要がある場合の単なる例です。

のは、私が照会したいとしましょう:私たちは、CakePHPでそれを行う必要がありますどのように上記のような

SELECT users.name, foods.name FROM users, foods WHERE users.id='1' AND users.id=foods.id 

は何か..?

ありがとうございました。

答えて

2

Cakeには完全なデータベース抽象化レイヤが含まれているので、SQLの並べ替えはまったく書かれません。あなたはこれらの線に沿って何かを正しくして、あなたのモデルを設定したい:

コントローラ

$jobs = $this->Job->find('all', array('order' => array('Job.title' => 'asc'))); 
$this->set(compact('jobs')); 

ビュー

<table> 
<?php foreach ($jobs as $job) : ?> 
    <tr><?php echo htmlentities($job['Job']['title']); ?></tr> 
    ... 
<?php endforeach; ?> 
</table> 

たぶん、あなたはthe tutorialに従ってください。 :)

+0

こんにちはジョイントテーブルの意味ですか? – woel

+3

@John私は実際にチュートリアルに従ってマニュアルを読むことをお勧めします。適切に設定されたモデルでは、Cakeは自動的に関連データを取得します(JOINを使用することもあります。必要に応じて明示的にJOINを実行する方法もあります。 – deceze

+0

いいえ、それは私の誤ったフレーズ私の質問は正しく、いくつか理解することができますが、それはhttp://stackoverflow.com/questions/806650/in-cakephp-how-to-retrieve-joined-result-from-私が尋ねようとしていた複数のテーブル。しかし、私はまだ理解できませんでした...答えてくれてありがとう。 – woel

2

CakePHPはあなたのためにすべてのSQLを行います。モデルを読み込むだけです.MVCセットアップを使用していれば、これを$コントローラとして使用することができます。

findAllByUserId($id)は、 "すべての行のuser_id = $ IDを検索する" を意味
// Get jobs and assign them to a var. 
$jobs = $this->findAllByUserId($id, array('order' => 'job_title'); 
// Send the var to the view. 
$this->set(compact($jobs)); 

次に、ビュー内で$jobsをループするだけです。あなたのモデルで$hasOne, $belongsToなどと適切に定義された関係を持つ限り、Cakeは自動的にすべての関連モデルを取得します。詳細はdatabase relationships in CakePHPを参照してください。

CakePHPはMVCモデルに厳しくなっています。blog tutorialを読むことをお勧めします。これは基本を概説し、いくつかの例を示しています。

更新: は、特定のフィールドに基づいてすべての行を集めることができたfindAllbyXを使用するコードを更新しました。 CakePHPで何か他のことをしたいのなら、CakePHPチュートリアルを完全に読む必要があります。

+0

こんにちは、私の質問が更新されたことを確認してください...ありがとう.. – woel

+0

私は自分の答えを更新しました、CakePHPは自動的にモデルに定義されているすべてのデータベース関係を持っている場合、 – Dunhamzzz

+0

いいえ、私たちはそのページを見ると、自分自身が投稿した投稿のみをリンクなどの表示ページに入れたいだけです。このチュートリアルでは、誰もが/すべての投稿をすべて表示しています。 – woel

0

まず、あなたが同じようなモデルとして、少なくとも「ユーザー」クラスを宣言する必要があります。

class User extends AppModel { 
    public $actsAs = array('containable'); 
    public $hasMany = array('Food'); 

} 

$ actsAsは、あなたがこのような場合には、お使いのモデルにビヘイビアを添付することができます方法です。このモデルと言います他のモデルと「包含する」または結合することができます。

$ hasManyはあなたのモデルがどのモデルに参加できるかを示します。

次に、あなたのコントローラであなたはそれがクエリに含まれている必要があり、他のどのようなモデルあなたのメインモデルに伝えることができます:

public function doSomething() { 
    $this->User->contain(array('Food')); 
    $user = $this->User->findById(1); 
    $this->set(compact($user)); 
} 

は、あなたがここに一緒にあなたのモデルをリンクすることができます方法についての詳細を参照してください: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

ところで、あなたのクエリ

SELECT users.name, foods.name FROM users, foods WHERE users.id='1' AND users.id=foods.id 

にそれは

する必要があります10
users.id = foods.user_id 
関連する問題