2015-12-29 39 views
2

嗨我正在设计一个基于审查的数据库设计。我在这部分有问题 如何检查两个用户是否在社交旅行中对彼此进行了评论?就像我们在工作完成时有一个审查系统,当工作完成时,雇主和自由职业者都可以互相提供评论就像我想在这里实施,如果雇主没有给予自由职业者审查,然后他会显示审查屏幕对自由职业者的工作,反之亦然。 同样是在这里对我的应用程序不同的是在我的应用程序是一趟数据库设计审查系统反对像使用php mysql上班旅行

我有一个行程表,随身携带申请表,项目和回顾在设计表

1- Trip table will have trips of users 

2- Registered users can requests items on a trip 

3-When the registered user go to the other user created trip page then he can send the request to user against that trip to carry an item for him . 
then an entry will be inserted in a carry_request table by sender_id which has requested the item and receiver id the user which has received the requests. 

现在我有问题审查表 我如何才能决定哪个用户给其他用户审查,哪些还没有给予审查 我们还将在审查表中对每个carry_request进行审查2项,因为对1个进位请求我们将有2个审阅来自发件人和来自接收器。

这里是我的查询

select i.id as item_id,t.id as trip_id,us.id as sender_user_id,ur.fname as receiver_fname 
from carry_requests cr 
INNER JOIN users us on cr.sender_id = us.id 
INNER JOIN users ur on cr.receiver_id = ur.id 
INNER JOIN trips t on cr.trip_id = t.id 
INNER JOIN items i on cr.item_id = i.id 
where cr.sender_id = 24; 

与此查询我得到的所有记录针对该用户所有被罚款,直到我必须发现哪些发送者并没有给予审查,以接收器或接收器没有给出审查让发件人在屏幕上向他们展示留下评论按钮。 这里是我的carry_requests表

CREATE TABLE IF NOT EXISTS `carry_requests` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `sender_id` int(11) NOT NULL, 
    `receiver_id` int(11) NOT NULL, 
    `trip_id` int(11) NOT NULL DEFAULT '0', 
    `item_id` int(11) NOT NULL, 
    `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `is_sender_reviwed` int(11) NOT NULL DEFAULT '0', 
    `is_receiver_reviwed` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) 

CREATE TABLE `trips` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `uid` INT(11) NOT NULL, 
    `from_location` VARCHAR(255) NOT NULL, 
    `to_location` VARCHAR(255) NOT NULL, 
    `departDTTM` DATE NOT NULL, 
    PRIMARY KEY (`id`) 
) 
CREATE TABLE IF NOT EXISTS `items` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `status` int(11) NOT NULL DEFAULT '0', 
    `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) 

审查表具有

CREATE TABLE `reviews` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `trip_id` INT(11) NOT NULL, 
    `reviewer_id` INT(11) NOT NULL DEFAULT '0', which has given the review 
    `user_id` INT(11) NOT NULL DEFAULT '0', to whom review was given 
    `rating` INT(11) NOT NULL DEFAULT '0', 
    `review` TEXT NULL, 
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) 
+0

您正在查看的是'LEFT JOIN' – cmorrissey

+0

@cmorrissey如果它们在评论表中是两行,那么左连接将返回2条记录,但我只想要一条记录 – user5184398

+0

@ user5184398,什么是reviewer_id和sender_id? – ZeJur

回答

1

好,我是这的表之间的关系是如何建立在laravel方面会回答:

首先改变UIDUSER_ID在行程表的SQL。

在用户模型,请执行以下操作:

// User created reviews 
public function created_reviews() 
{ 
    return $this->hasMany(App\Review::class, 'reviewer_id'); 
} 

// Reviews on User 
public function reviews() 
{ 
    return $this->hasMany(App\Review::class, 'user_id'); 
} 

// Organized Trips 
public function trips() 
{ 
    return $this->hasMany(App\Trip::class); 
} 

在行程模式:

// Trip Organizer 
public function organizer() 
{ 
    return $this->belongsTo(App\User::class); 
} 

// Trip Reviews 
public function reviews() 
{ 
    return $this->hasMany(App\Review::class); 
} 

在评论模型:

// Review Creator 
public function sender() 
{ 
    return $this->belongsTo(App\User::class,'reviewer_id'); 
} 

// Review Receiver 
public function receiver() 
{ 
    return $this->belongsTo(App\User::class,'user_id'); 
} 

// Associated Trip 
public function trip() 
{ 
    return $this->belongsTo(App\Trip::class); 
} 

如果您运行下面的代码:

$user = User::find(10)->with(['reviews','created_reviews','trips','trips.reviews']); 

它会给你以下几点:

  • 评论用户完成。
  • 评论用户创建的评论。
  • 用户组织的旅程。
  • 在用户组织的旅行上完成的评论。

希望这有助于。

1

你能描述行程&审核以及审核&发送者之间的关系的结构?

这里是我假设:

  1. 之旅可以有多个评论。
  2. 一次旅行只能有一个组织者。
  3. 用户可以离开组织者

是一个单一的检讨,我在这正确吗?

+0

我编辑了我的问题,请检查这个问题 我已经更新了我的设计,为此添加了carry_request表,但仍然存在问题 – user5184398

+0

用户可以发送请求一个项目将他带到旅行老板那么一个条目将在carry_request表中进行。 对carry_request这两个用户将给予彼此的审查意味着我们将有两个评论发件人发送请求send_id和receiver_id谁收到请求 – user5184398