Codeigniter 使用 Join 或 where 来验证一行结果

Codeigniter using Join or where to validate a row of result

用户table:

User_id(Pk,AI) | First_name | Last_name


1 | John | Doe

2 | Peter | Griffin

3 | Donald | Duck

项目table:

Item_id(PK,AI) | Owner(FK - user_id) | Item_name


1 | 1 | Shoes

2 | 2 | Pants

3 | 3 | Shirt

Item_review table:

Item_review_id(PK,AI) | Item(FK - item_id) | Reviewer(FK - user_id) | Rating | Content


1 | 1 | 2 | 4 | Great

对于上面的表格,在将一行插入评论之前我想检查三件事 table。

  1. 检查评论者是否不是项目所有者(无法评论自己的项目或有偏见的评论)
  2. 表单验证(如果评论者在评分和内容中输入任何内容)
  3. 检查评论是否存在(没有重复评论或每个用户只有一个评论)

这是我的程序,我已经完成了除第一个之外的其他两个,因为我不确定并且对如何执行此操作感到困惑。

我可以简单地使用 get where 查询,例如:

public function check_biased_review($user_id, $item_id){

$this->db->select('*');
$this->db->from('item');
$this->db->where('item_id', $item_id);
$this->db->where('owner', $user_id);
$query = $this->db->get();

if($query->num_rows() > 0){
return TRUE;}
else{
return FALSE;}
}

我实际上通过编写上面的代码解决了这个问题,我有这样的误解,如果有很多评论来找到匹配的行,我将不得不查询这么多行,而我首先忘记了 where 子句将在数据库中执行,而不是在模型函数中使用 foreach 循环和 if 语句执行。我猜你必须先编写代码,而不是有假设并且永远不要这样做来检查,否则你可能会像我一样浪费时间。

但我的第一个解决方案是使用连接查询。 $item_id$user_id 从控制器传递到模型。

我要如何加入 table 才能获得相同的结果?

下面我只是试着给你一个连接查询的例子。

$this->db->select('*');
$this->db->from('Item_review');
$this->db->join('User','Item_review.user_id = User.User_id');
$this->db->join('Item','Item_review.item_id= Item.Item_id');
$this->db->where('item_id', $item_id);
$this->db->where('owner', $user_id);
$query = $this->db->get();