【问题标题】:CakePHP Select QueryCakePHP 选择查询
【发布时间】:2011-09-26 13:59:58
【问题描述】:

有没有办法从 CakePHP 的特定表中选择所有字段? 所以像:

$this->Model1->find('first',
                    array('fields' => 'Model2.*',
                          'conditions' => 'Model1.id = Model2.Model1_id'),
                          'contain' => array());

我找遍了整个地方,找不到任何东西。 我有点希望我不必输入 Model2 的所有字段:(

请原谅我的粗心,我刚开始学习 Cake。非常感谢!

【问题讨论】:

  • 我不知道答案,但你也可以 $this->Model1->Model2->find('first'... 在这种特定情况下。
  • 只是为了确保,Model1->Model2 暗示 Model2 有一个映射到 Model1 的外键,对吧?
  • 你做得对,但你应该使用 cakephp 关联(hasMany,belongsTo,HABTM)然后你只需要做$this->Model1->find('first', array('fields'=>'Model2.*') 如果不是你将不得不加入,强烈建议你用第一种方法:D

标签: mysql cakephp cakephp-model


【解决方案1】:

你没有。您拥有的语法(即Model2.* 部分)将起作用,根本不定义任何字段。默认情况下,它们都被返回。

不过,我不知道您使用的 find 调用是否有效。在Model1 上执行查找以从Model2 获取数据似乎很尴尬。正如 Henri 在他的评论中提到的,最好在 Model2 上进行查找。

【讨论】:

  • 是的,但如果可以的话,我会的。我目前正在使用的东西(别人的代码)似乎没有 Model2 的模型,即使有一张桌子。
  • 很公平。不过值得注意的是,如果 Cake 不存在并且被引用,它会(隐式地)为您生成一个模型。如果表格遵循命名约定,它应该可以正常工作。
【解决方案2】:

对于某些驱动程序,通配符无法按预期工作。所以你需要完整的字段列表。

$ds = $this->Model1->getDataSource();

$this->Model1->find('first', array(
    'fields' => $ds->fields($this->Model1),
    'conditions' => 'Model1.id = Model2.Model1_id',
    'contain' => array()
));

【讨论】:

    【解决方案3】:

    你可以试试这个

    $this->Model1->find('first',
    array(
      'fields'=>'Model2.*',
    
      'joins' => array(
          array(
            'table'=>'table',
            'alias'=>'Model2',
            //'type'=>'LEFT',
            'conditions'=>array(
              "Model2.model1_id = Model1.id",          
            ),
          ),
      ),
    
      'conditions' => array('Model1.somefields' =>'1'
      )
    

    ) );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      相关资源
      最近更新 更多