嗨,我正在设计一个基于评论的数据库设计。这部分我有问题
我如何检查两个用户在社交旅行中是否都对彼此进行了审查。就像我们在upwork中有一个审查系统,当工作完成时,雇主和自由职业者都可以对彼此进行审查,就像我想在这里实现的那样,如果雇主没有对自由职业者进行审查,那么他将显示在屏幕上,针对自由职业者的工作反之亦然。
在我的应用程序上也是一样的区别在我的应用程序中是trip
我有一张旅行表,携带申请表,物品和评论表

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.

现在我在设计评审表时遇到了问题
我怎样才能决定哪些用户已经给了其他用户评论,哪些没有
此外,我们将在一个审查表中针对每个结转请求有两个条目进行审查,因为针对一个结转请求,我们将有两个审查,一个来自发送方,另一个来自接收方。
这是我的问题
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;

有了这个查询,我得到这个用户的所有记录都很好,直到我必须找出哪个发件人没有给收件人审阅,或者哪个收件人没有给发件人审阅,才能在屏幕上显示“离开审阅”按钮。
这是我的携带请求表
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`)
)

最佳答案

好的,我要回答的是,在laravel中,表之间的关系是如何建立的:
首先在trips表sql中将uid更改为用户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']);

它将为您提供以下信息:
对用户的评论。
用户创建的评论。
用户组织的旅行。
由用户组织的旅行的评论。
希望这有帮助。

关于php - 使用php mysql进行审查系统的数据库设计,以防旅行之类的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34518394/

10-09 00:50