CakePHP问题 - 查询第二个表

时间:2013-11-03 23:22:18

标签: cakephp

我不确定如何做到这一点。我需要查询辅助表,以根据另一个表的id来提取类别的名称。全部动态。

我试过了hasmanyhasone,我无法解决任何问题。 我在这里得到了什么

我有两张桌子:

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

adsites
id | name

我正在尝试显示广告表,并将adsite_id替换为adsite.name的名称。

我无法弄清楚这一点。

AdvertismentController:

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

2 个答案:

答案 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')); 
}

这应该有用。

答案 1 :(得分:0)

在您的方案中,Advertisement属于SiteSite可以有多个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);
}