【问题标题】:retrieve data from multiple tables in cakephp从 cakephp 中的多个表中检索数据
【发布时间】:2014-03-10 23:47:32
【问题描述】:

我正在使用 cakephp 2.xx。我的数据库名称和性别中有两个表。我写 innerjoin 以显示带有性别的名称。性别来自性别表。我的控制器在下面

class NamesController extends AppController {
public $helpers = array("Html", "Form");
public function index() {
    $this->loadModel("names");
$query_options = array();
$query_options["fields"] = array("names.Name","genders.gender");
$query_options["joins"] = array("table" => "genders", "alias" => "genders", "type" => "INNER", "conditions" => array("genders.id = names.Gender_id",));
$this->set("gender", $this->names->find('all', array($query_options,'limit' => 10 ,'recursive' => 1)));
}
}

命名模型是

class Names extends AppModel {  
     var $belongsTo = 'Genders';     
}

性别模型是

class Genders extends AppModel {    
    var $hasMany = 'Names';
    }

和ctp代码是

foreach ($gender as $post);
echo $post["names"]["Name"];
echo $post["genders"]["gender"];

这个打印名字很好。但不打印性别并导致未定义索引:性别。请帮忙

【问题讨论】:

  • 如果您需要子表条件,请使用连接。使用 contains 检索子表数据。需要时同时使用。 :)
  • 我使用连接并单独包含但结果相同
  • 检查我的答案是否适合你。

标签: php cakephp


【解决方案1】:

我的建议,您不必遵循它:对模型使用单数名称(姓名,性别)。这样,它将自动连接到适当的表(名称、性别),并且您的模型将自动加载到它们的控制器(NamesController、GendersController)中。如果您不遵循此建议,请相应地更改下面的代码(如您在问题中所做的那样手动加载模型并在模型中设置 $useTable)。

选项 1:获取所有包含性别数据的名称:

class NamesController extends AppController {

    public function index() {
        $this->Name->Behaviors->load('Containable');
        $query_options = array(
            'fields' => array("Name.name"),
            'contain' => array(
                'Gender' => array(
                    'fields' => array('Gender.gender'),
                ),
            ),
        );
        $this->set("names", $this->Name->find('all', $query_options));
    }
}

选项 2:获取包含属于他们的所有名称的性别:

class NamesController extends AppController {

    public function index() {
        $this->Name->Gender->Behaviors->load('Containable');
        $query_options = array(
            'fields' => array("Gender.gender"),
            'contain' => array(
                'Name' => array(
                    'fields' => array('Name.name'),
                ),
            ),
        );
        $this->set("genders", $this->Name->Gender->find('all', $query_options));
    }
}

在视图中使用 debug($names) 或 debug($genders) 来查看输出数组结构。

【讨论】:

  • 我尝试了选项 1 和 2,但结果相同。我如何应用单数名称。我只写了一个控制器名称控制器。没有其他的基因控制者。如果是的话,是否需要写另一个。谢谢
  • 这只是一个建议,没有它也可以工作......这意味着当你有一个names 表和一个genders 表时,你可以访问Gender 模型并使用它的模型功能甚至没有定义该模型。这就是蛋糕的工作原理。但这与您的问题无关。你能调试你得到的输出并发布结果吗?
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2011-12-23
  • 2013-03-26
  • 1970-01-01
相关资源
最近更新 更多