【发布时间】:2022-01-23 16:43:00
【问题描述】:
在 Laravel 8.0 中是否有可能获得过滤的关系模型?
示例:在我拥有的控制器中
$thread = Thread::find(1);
// example logic between getting the thread and passing to JsonResponse
$thread->messages = $thread->messages->filter(function (Message $message) {
return $message->type_id === 3;
});
return new JsonResponse($thread);
感谢致电$thread->messages 我在响应中延迟加载消息,但它延迟加载属于该线程的所有消息,我只想获得过滤的消息。
我怎样才能做到这一点?
线程模型
public function messages(): HasMany
{
return $this->hasMany(Message::class);
}
消息模型
public function type(): HasOne
{
return $this->hasOne(MessageType::class, 'id', 'type_id');
}
【问题讨论】:
-
在这里使用范围可能也很有趣:laravel.com/docs/8.x/eloquent#query-scopes
-
@PeterKrebs 你会怎么做?在文档中,我只能看到从同一模型声明和调用范围的示例(在 User 模型中声明了 scopePopular 方法,然后是 User::popular()->get())。就我而言,我有 Thread 模型,但范围将在 Message 模型中声明。
-
我找到了这个教程。检查“范围与关系”部分:medium.com/@janaksan_/using-scope-with-laravel-7c80dd6a2c3d
-
本教程展示了如何分别获取 $category 和 $activePosts,但我需要加载 $activePosts 的 $category
-
您可以使用参数调用作用域,这将有助于减少重复代码。只是一个想法,我没有时间给出完整的答案。
标签: laravel