我正在尝试从多个表中获取数据,但我已经结束了此错误: SQL:SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'p.firstname'
$criteria = new CDbCriteria;
$criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email';
$criteria->join = 'LEFT JOIN `profiles` p ON p.user_id = user_id';
$criteria->join = 'LEFT JOIN users u ON user_id = u.id';
$criteria->condition = 'offer_id = :oID';
$criteria->params = array(':oID' => $_GET['id']);
$model = MyModel::model()->findAll($criteria);
任何人都知道我做错了什么? 或者有更好的方法来获取相关数据吗?
答案 0 :(得分:18)
你犯了同样的错误。
您覆盖第一次加入第二次加入,而不是附加第二次加入。
$criteria->join = "join ...."; //first join
$criteria->join .= "join ...."; //second join
欢呼声
答案 1 :(得分:7)
实际上更好地使用这样的“with”子句:
$criteria->with = array(
'profiles '=>array(
'select'=>'profiles.user_id',
'together'=>true
),
'users'=>array(
'select'=>'users.id',
'together'=>true
)
);
您也可以在模型搜索CGridView DataProvider时使用它。
答案 2 :(得分:3)
如果您显示数据库结构,那就更好了。但是,这是使用左连接
连接多个表的解决方案连接表的代码:
$criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email';
$criteria->alias = 'c';
$criteria->join = 'LEFT JOIN profiles p ON (p.user_id = c.user_id) LEFT JOIN users u ON (c.user_id = u.id)';
希望它会对你有所帮助。