【问题标题】:Yii CDbCriteria select with AS aliasYii CDbCriteria 选择与 AS 别名
【发布时间】:2013-11-29 12:33:41
【问题描述】:

我将加入 page_content 具有相同的表,之后两者都有名为 sef_url 的列 以下代码返回错误。 是否有可能在CDbCriteria->select 中使用 AS 'alias_name'

$criteria=new CDbCriteria;
$criteria->alias = 'p';
$criteria->select = array('p.sef_url, p.date_last_modified, pc.sef_url AS parent_sef_url');
$criteria->join = 'LEFT JOIN page_content pc ON p.parent_pageid = pc.pageid';

$criteria->condition = 'p.published=:published AND p.sitemap_index=:sitemap_index';
$criteria->params = array(':published'=>1,':sitemap_index'=>0); 

$result_arr = parent::model()->findAll($criteria);

echo '<pre>';
print_r($result_arr);

foreach($result_arr as $row) {
  echo $row['parent_sef_url'];
}

【问题讨论】:

  • 你得到什么样的错误?尝试在 page_content 模型中定义 public $parent_sef_url。我猜它类似于yiiframework.com/forum/index.php/topic/…
  • 我的错误是,这是一个无效的代码 $criteria-&gt;select=array(..., pc.sef_url AS parent_sef_url'); 但是我需要一种方法来唯一标识这两个 sef_url 列

标签: php mysql yii


【解决方案1】:

你还应该定义一个关系:

public function relations()
{
    return array(
        'parentPageContent'=>array(self::BELONGS_TO, 'PageItem', 'parent_pageid'),
    );
}

你可以这样做之后:

$pageContents = PageContent::model()->with('parentPageContent')->findAllByAttributes(array(':published'=>1,':sitemap_index'=>0));
foreach($pageContents as $pageContent){
    echo $pageContent->parentPageContent->sef_url;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多