【发布时间】:2018-06-26 21:42:56
【问题描述】:
我有一个名为projects 的表和一个名为project_slugs 的表。 slugs 表包含给定项目的 slug 的所有迭代,如下所示:
项目表中的字段引用 slug id 没有意义(我认为),因为一个项目可以有多个 slug,因此有多个 ids。唯一不变的是 slugs 表中的 project_id 与 projects 表中项目的 id 相同。
现在,当我渲染我的项目时,我想为每个项目获取最新的 slug,所以我做了这样的事情 - 我将 projects 表的结果作为对象并附加 slug 来自 project_slugs使用 foreach 一个一个。
/**
* Gets projects as defined by limit
* Appends slugs
*
* @param int $limit
* @return array
*/
public function get_projects($limit = '')
{
$this->db->order_by('s_order', 'DESC');
if (!empty($limit)) {
$this->db->limit($limit);
}
$query = $this->db->get_where('projects', array('published' => '1'));
$items = $query->result();
$this->frontend_model->add_slugs($items);
return $items;
}
前端模型:
public function get_slug($project_id) {
$query = $this->db->select('slug')
->order_by('created', 'ASC') // most recent
->where('project_id', $project_id)
->get('project_slugs')
->row();
return $query->slug; // get most recent slug
}
public function add_slugs($items) {
foreach ($items as $k => $v) {
$v->slug = $this->frontend_model->get_slug($v->id);
}
}
有没有办法通过连接查询来生成如下所示的结果:https://pastebin.com/W5r3zR8f?我只有在一个表与另一个表有相关字段的情况下进行连接的经验,所以这让我很难过。
稍微相关:我在表项目中有一个 slug 表而不仅仅是一个 slug 字段的原因是 slug 取决于名称。如果名称更改,则 slug 也会更改,并且出于搜索引擎的目的,旧 slug 将保留在 project_slugs 表中并重定向到新 slug。
【问题讨论】:
标签: php mysql codeigniter codeigniter-3 slug