2013-11-03 79 views
-2

我不確定如何做到這一點。我需要查詢一個輔助表來根據另一個表的id拉取一個類別的名稱。全部動態。CakePHP問題 - 查詢第二個表

我試過hasmany,hasone,我什麼都沒有上班。 在這裏我得到了什麼

我有2個表:

Advertisments id | adname | adsite_id  
adsite_id == adsites.id 

adsites 
id | name 

我想顯示廣告的表格,並與adsite.name的名稱替換adsite_id。

我無法弄清楚這一點。

AdvertismentController:

function index() { $this->set('ads', $this->Advertisment->find('all')); }

+0

沒有答案的工作?因爲我們不再從你那裏來 –

回答

0

你應該在這種情況下使用$belongsTo

型號:Advertisments.php

class Advertisment extends AppModel { 
    public $belongsTo = array(
     'Adsite' => array(
      'className' => 'Adsite', 
      'foreignKey' => 'adsite_id' 
     ) 
    ); 
} 

型號:Adsites.php

class Adsite extends AppModel { 
    public $hasOne = 'Advertisment'; 
} 

控制器AdvertismentsController.php

function index() { 
    $this->set('ads', $this->Advertisment->Adsite->find('all')); 
} 

這應該起作用。

0

在您的方案中,Advertisement屬於Site,並且Site可能有許多Advertisement記錄。按照CakePHP的慣例,你也不會命名你的列。如果Advertisement屬於Site,那麼您的外鍵列應該被命名爲site_id

回到現有的問題,您可以將Containable行爲添加到模型中,以便在查詢一個模型時也可以獲取其相關數據。因此,如果您查詢Advertisement,它也會獲取相應的Site記錄。你的模型是這樣的:

<?php 
class Advertisement extends AppModel { 

    public $name = 'Advertisement'; 
    public $actsAs = array('Containable'); 
    public $belongsTo = array('Site'); 
} 

而且你Site型號:

<?php 
class Site extends AppModel { 
    public $name = 'Site'; 
    public $actsAs = array('Containable'); 
    public $hasMany = array('Advertisement'); 
} 

然後,您可以查詢廣告在目前這樣的網站:

public function index() { 
    $advertisements = $this->Advertisement->find('all'); 

    $this->set('advertisements', $advertisements); 
}