使用 php mysql 针对上下班等旅行的审查系统的数据库设计

Database Design for review system against trips like upwork using php mysql

您好,我正在设计一个基于评论的数据库设计。我在这部分有问题 我如何检查两个用户是否在社交 trip.just 上对彼此进行了评论,就像我们在工作完成时在 upwork 中有一个评论系统一样,雇主和自由职业者都可以像我想实施的那样互相评论在这里,如果雇主没有对自由职业者进行审查,那么他将在屏幕上显示对自由职业者的工作进行审查,反之亦然。 我的应用程序也一样,不同之处在于我的应用程序,它是 trip

我要去旅行 table,携带请求 table,项目和评论 tables

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.

现在我在设计评论时遇到问题 table 我如何确定哪些用户已对其他用户进行了评论,哪些还没有 我们还将在评论 table 中有 2 个条目针对每个 carry_request 进行评论,因为针对 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 table

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`)
) 

评论Table有

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`)
)

您能描述一下旅行与评论以及评论者与发送者之间的关系结构吗?

这是我的假设:

  1. 一次旅行可以有多个评论。
  2. 一次旅行只能有一个组织者。
  3. 用户可以为组织者留下一条评论

我说的对吗?

好的,我将根据 table 之间的关系如何在 laravel 中设置来回答这个问题:

首先在行程tableSQL.[=14中将uid改为user_id =]

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

// 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']);

它将为您提供以下内容:

  • 对用户完成的评论。
  • 用户创建的评论。
  • 用户组织的旅行。
  • 对用户组织的旅行所做的评论。

希望对您有所帮助。