我正在使用Jamie Rumbelow的MY_Model并需要添加一个函数,以便包含一些额外的数据。
我看到这篇文章,它帮助我找出了我需要完成的工作,但是我遇到了SQL错误。关于什么是错的任何想法?
错误号码:1064
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'FROM(
titles
)加入users
ONtitles
。creator_id
= 第2行users
。user_id
'
SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name)` AS creator FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id`
public function with_creator()
{
$this->db->join('users', 'titles.creator_id = users.user_id');
$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator");
return $this;
}
当我使用Jamie的MY_Model时,我使用以下代码。
// In controller
$pages = $this->pages->with_creator()->get_all();
// In Model
class Pages_m extends MY_Model
{
public $_table = 'pages';
public $primary_key = 'page_id';
public function with_creator()
{
$this->db->join('users', 'pages.creator_id = users.user_id');
$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);
return $this;
}
}
它现在只包含创建索引,不包括页面自身的任何数据。
答案 0 :(得分:3)
您的查询在错误的地方有反复。修复如下:
SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name`) AS creator
FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id`
答案 1 :(得分:3)
这是CodeIgniter的活动记录/查询构建器本身的错误。它与杰米的基础模型无关。发生该错误的原因是SELECT
字符串使用explode()
进行细分,并使用逗号作为分隔符。由于函数中有逗号,因此在某些情况下会产生一些混乱。
您有两种选择:
手动编写查询。您不 一直使用查询构建器,特别是如果您只针对单一类型的数据库(查询构建器的一个重要特性是使您的应用程序与数据库无关)
告诉查询构建器不要转义该特定SELECT
调用。您可以通过两种方式执行此操作:
数组语法:
$this->db->select(array("CONCAT_WS(' ', users.first_name, users.last_name) AS creator"));
转义参数:
$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);
当CI 3.0变得稳定时,应该在CI 3.0中更正此错误。它尚未在开发版中修复,但问题是已知的,它只需要解决和合并。如果您有任何反馈,you can contribute here。
选择问题:查询只返回creator
concat结果,因为这就是您要求的全部内容。 get_all()
方法不会自动选择所有内容,这只是查询构建器的标准默认值。指定select()
电话后,它会使用该电话而非默认*
。
您应该修改select()
(或添加另一个)以确保正确调用其他列。