Laravel 5.1 - pivot table between 3 tables

2019-07-08 09:30发布

I'm relatively new to Laravel and have been working on it in my internship for the last 3 weeks however now I have a problem.

I have 3 tables: Users, Bids, and Jobs. I want a user to be able to place a bid on the job.

The basic structure of my tables is as follows:

Users:
id | name | email | description

Jobs:
id | title | description

Bids:
id | proposal

The following criteria need to be met:

  1. A user can bid on many jobs, however they can only bid on each job once.
  2. A job can have many bids from many users.
  3. Each bid is only linked to one user and one job.

Example: User 1 makes a proposal of £300 on Job 1. This creates a bid with id 1 and proposal £300. The pivot table will contain the user id(1), the job id(1) and the bid id(1) along with the status which by default will be set to Pending.

I also want the table that links all 3 to have a status. I created one as follows:

bid_job_user:

bid_id | user_id | job_id | status

But the relationships were all wrong so syncing methods etc wouldn't work correctly if I wanted to update a status. Any help is appreciated, even if it is just how I should define my relationships.

I cannot link the user to the job in a table(job_user) as this is already defined elsewhere as a many to many relationship as managers(users) can create many jobs and jobs can be created by many managers.

If you need any more information please ask.

1条回答
劳资没心,怎么记你
2楼-- · 2019-07-08 10:16

To create the bid table (As per comments) you could treat it as a intersection entity.

<!-- User.php -->
//should recognize user_id,job_id by itself
public function bidsMade() {
  return $this->belongsToMany('App\Job','bids')->withPivot('status','proposal');
}

<!-- Job.php -->
//should recognize user_id,job_id by itself
public function bidsRecieved() {
  return $this->belongsToMany('App\User','bids')->withPivot('status','proposal');
}
查看更多
登录 后发表回答