我有桌子
threads
- id
replies
- id
- repliable_id
- repliable_type
我想在 Thread 中添加另一列,这是最新回复的ID。
Thread::where('id',1)->withRecentReply()->get()
以及以下查询范围
public function scopeWithRecentReply() {
return $query->addSelect([
'recent_reply_id' => Reply::select('id')
->whereHasMorph('repliable', ['App\Thread'], function ($q) {
$q->where('repliable_id', '=', 'threads.id');
})->latest('created_at')
->take(1),
]);
}
我也尝试过
public function scopeWithRecentReply() {
return $query->addSelect([
'recent_reply_id' => Reply::select('id')
->where('repliable_id', '=', 'threads.id')
->latest('created_at')
->take(1),
]);
}
但是在两种情况下
recent_reply_id => null
如果我输入整数而不是 threads.id ,它会起作用并且 recent_reply_id 不为空 例如
public function scopeWithRecentReply() {
return $query->addSelect([
'recent_reply_id' => Reply::select('id')
->whereHasMorph('repliable', ['App\Thread'], function ($q) {
$q->where('repliable_id', '=', 1);
})->latest('created_at')
->take(1),
]);
}
我的问题是
是否可以使用相应的 threads.id 来获取 recent_reply_id ?
答案 0 :(得分:0)
我建议您使用appends
而不是query scopes
,因此在您的Thread
模型中,我们将添加
protected $appends = ['recent_reply_id'];
.....
public function replies () {
// you need to add here your relation with replies table
}
public function getRecentReplyIdAttribute () {
return $this->replies()->latest('id')->first()->id;
}
现在无论您在哪里查询threads
表,您都可以像这样访问recent_reply_id
$thread = Thread::where('id',1)->withRecentReply()->get();
$thread->recent_reply_id;