2010-08-25 94 views
2

我有兩個表MySQL的:加入/關於兩個表

1. Airline -id(primary), name 
2. Form - id(primary), operator, other unwanted fields 

我想涉及到Airline.name Form.operator。是否有可能,因爲Form.operator不是主鍵,如果是的話給我查詢。

能有一個人還指導我如何將CakePHP的模型關係,在這種情況下

回答

1
var $hasOne = array(
    'airline' => array(
     'className' => 'airline', 
     'foreignKey' => false, 
     'conditions' => array(
      '`form`.`yourfield` = `airline`.`yourfield`' 
     ) 
    ) 
} 

這應該有效。只需更換您的字段

0
select * from `airline`, `form` where `airline.id`=`form.operator` 
+0

恢復到純sql應該被認爲是最後一次重新配置,因爲它有各種缺點,如:丟失db獨立性,引入安全風險。 親切的問候 – benjamin 2010-08-25 09:23:10

2

我勸因爲是它在系統中其他地方使用您不使用名稱表格,但是試試這個(或類似的東西),並宣讀http://book.cakephp.org/view/1039/Associations-Linking-Models-Together

在應用程序/模型/ airline.php:

<?php 
class Airline extends AppModel 
{ 
    var $name = 'Airline'; 

    var $hasOne = array(
     'Form' => array(
     'className' => 'Form', 
     'foreignKey' => 'operator') 
     ); 

// other stuff 
// ... // 
?> 

在應用程序/模型/ form.php的:

<?php 
class Form extends AppModel 
{ 
    var $name = 'Form'; 

    var $belongsTo = array(
     'Airline' => array(
     'className' => 'Airline', 
     'foreignKey' => 'operator') 
     ) 
    ; 
// other stuff 
// ... // 
?> 
+0

感謝,但航空公司。操作員不是主鍵 – aWebDeveloper 2010-08-25 11:36:50

+0

你誤會 - 這裏'運營商'被定義爲關係中的外鍵。 Cake知道在哪個表上找到它作爲$ hasOne或$ belongsTo語句的結果,並且知道將它匹配到Airline表上的'id'(除非你已經告訴Cake使用不同的字段)。 – Leo 2010-08-25 11:56:06

1

爲了使關係,如獅子座建議,工作,你必須遵循蛋糕的慣例。爲了稍後爲您節省一些頭痛的問題,我會建議您使用寫得很好的簡短材料herehere。你會學到如cakephp可以爲你解決問題的一個很好的外鍵命名爲operator_id,而不是簡單的operator(如果操作員還不是外鍵,那可能是因爲你有數據庫設計問題)。 這裏的提升是指在例如一次定義之後自動識別關係。一個$ belongsTo。