【发布时间】:2015-09-17 17:12:57
【问题描述】:
我有三个表,一个用户表、一个工作表和一个投标表。用户可以发布多个职位,并且用户可以对不属于他们的职位出价。
我的目标:我正在尝试查询 Jobs 表以查找用户的所有工作,并查询 Bids 表以获取用户竞标的所有工作。然后我想根据时间戳对工作和出价进行排序并返回工作 ID
表格设置如下:
| USERS | JOBS | BIDS
| id | id | id
| username | user_id | user_id
| password | title | job_id
| | | bid_amount
表之间的关系如下:
工作:
public function bids()
{
return $this->hasMany('App\RocketCandy\Repos\Bids\Bid');
}
public function user()
{
return $this->belongsTo('App\RocketCandy\Repos\Users\User');
}
用户:
public function jobs()
{
return $this->hasMany('App\RocketCandy\Repos\Jobs\Job');
}
public function bids()
{
return $this->hasMany('App\RocketCandy\Repos\Bids\Bid');
}
出价:
public function jobs()
{
return $this->belongsTo('App\RocketCandy\Repos\Jobs\Job');
}
public function users()
{
return $this->belongsTo('App\RocketCandy\Repos\Users\User');
}
我开发的以下代码返回作业和出价,但它不够聪明,无法根据 updated_at 时间戳对 ID 进行排序。
public function getUsersJobs($userId)
{
// Get the jobs that the user posted
$postedJobs = Job::where('user_id', $userId)
->lists('id')
->toArray();
// Get the jobs that the user is bidding on
$biddedJobs = Job::with('bids')
->whereHas('bids', function ($q) use ($userId) {
$q->where('user_id', $userId);
})->lists('id')
->toArray();
$jobIds = array_merge($postedJobs, $biddedJobs);
// Return the jobs that a user has posted and is bidding on
return Job::whereIn('id', $jobIds)
->OrderBy('updated_at', 'DESC')
->get();
}
【问题讨论】:
-
orderBy 子句的错字?它应该是 ->orderBy 不是 ->OrderBy
-
好的有效点,但答案呢?
-
对不起,我没有得到你想要在这里实现的目标。那么,您在修正错字后编写的代码缺少什么?它仍然没有对 ID 进行排序吗?
-
所以基本上我想获取用户通过 id 发布的所有工作。我想获取用户通过 job_id 进行的所有出价。将它们全部返回给用户(这样他就可以看到投标和发布的工作的组合视图),但根据“updated_at”时间戳对它们进行排序
标签: php mysql laravel eloquent