2013-04-26 31 views
0

我沒有運氣試圖彎曲CakePHP做我所需要的。CakePHP - 查找模型使用協會以外的ID

我有2個型號,代碼& ListingService。

ListingService的領域如下:ID,標題,listing_id,service_type_id (因此,在某種程度上,它就像一個已經和屬於與上市一對多的關係)

當我做一個找到現在。 (在Listing.php使用屬於關聯)

public $belongsTo = array(
    'ListingService' => array(
     'className' => 'ListingService', 
     'foreignKey' => 'id' 
    ) 
); 

$this->paginate = array('type' => 'all', 'recursive' => 0, 
     'fields' => array('Listing.id', 'Listing.title', 
        'ListingService.service_type_id','ListingService.title'), 
     'limit' => 10 
); 

這是顯示

SELECT `Listing`.`id`, `Listing`.`title`, `ListingService`.`service_type_id`, `ListingService`.`title` FROM `listings` AS `Listing` LEFT JOIN `listing_services` AS `ListingService` ON (`Listing`.`id` = `ListingService`.`id`) LIMIT 10 

查詢這幾乎是我需要的,但我想LEFT JOIN爲ON(Listingid = ListingServicelisting_id)代替ON(Listingid = ListingServiceid

如果我使用 「的hasMany」 它不甚至不用做左連接。

我目前沒有ListingService.php模型。

請注意。

謝謝
三通

回答

0

找到了解決辦法。

我需要先做這個。

$this->Listing->ListingService->primaryKey = 'listing_id'; 

這是黑客攻擊嗎?如果是的話,有沒有更好的方法來做到這一點?

+1

如果listing_id * *是數據庫中的主鍵,它是不是黑客攻擊,但它確實* *的意思是你沒有堅持CakePHP的約定。如果它是一個新項目,我會建議您儘可能使用CakePHP命名約定。這不僅會使得它更容易,它還會迫使你*一致*。參見[模型和數據庫公約](http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions) – thaJeztah 2013-04-27 12:44:21

0

我覺得你屬於關聯應該是這樣的

public $belongsTo = array(
    'ListingService' => array(
     'className' => 'ListingService', 
     'foreignKey' => 'listing_id' 
    ) 
);