我正在使用PHPActiveRecord和CodeIgniter。我正在尝试创建博客CMS,并且博客具有许多类别,并且它引用了另一个称为blogrefs的表。所以基本上
博客=> blogrefs =>博客猫
blogrefs通过blogrefs.blog_id引用博客。
blogrefs通过blogrefs.blogcat_id与Blogcats进行引用
function get_blogs($params = array()){
$CI =& get_instance();
$joins = 'LEFT JOIN blogrefs ON blogs.id = blogrefs.blog_id';
$joins .= 'LEFT JOIN blogcats ON blogrefs.blogcat_id = blogcats.id';
$category = (isset($params['category']))?$params['category']:'';
$keyword = (isset($params['keyword']))?$params['keyword']:'';
$status = (!isset($params['status']) || $params['status'] == '')?'':$params['status'];
$order_by = (isset($params['order_by']))?$params['order_by']:'created_on';
$direction = (isset($params['direction']))?$params['direction']:'DESC';
$limit = (isset($params['limit']))?$params['limit']:'';
$offset = (isset($params['offset']))?$params['offset']:'';
$st = '';
if($status == ''){
$st = '!';
}
if(!empty($category))
{
$conditions = array(
"((blogcats.id = ?) OR (blogcats.parent_id = ?))
AND blogs.status $st= ?
AND (blogs.title LIKE '%$keyword%' OR blogs.content LIKE '%$keyword%')",$category,$category,$status
);
}else{
$conditions = array(
"blogs.status $st= ?
AND (blogs.title LIKE '%$keyword%' OR blogs.content LIKE '%$keyword%')",$status
);
}
$result = Blog::find('all',array(
'include' => array('blogcat','blogref','user'),
'joins' => $joins,
'conditions' => $conditions,
'limit' => $limit,
'offset' => $offset,
'order' => "$order_by $direction",
'group' => 'blogs.id'
));
$count = Blog::find('all',array(
'conditions' => $conditions
));
$object = new stdClass;
$object->posts = $result;
$object->total = count($count);
return $object;
}
一切都不仅在我使用时有效
(((blogcats.id =?)或(blogcats.parent_id =?))
从特定类别获取博客。任何答案将不胜感激。
最佳答案
我不太清楚。为什么不使用模型和CI的Active Record类? (http://ellislab.com/codeigniter/user-guide/database/active_record.html),例如
$this->db->where('blogrefs.blogcat_id', $catid);
$this->db->join('blogrefs', 'blogs.id = blogrefs.blog_id');
...
关于php - LEFT JOIN关联返回未知列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15690285/