📅  最后修改于: 2023-12-03 14:43:47.658000             🧑  作者: Mango
在使用 Laravel 框架开发应用程序时,经常需要在同一模型中查找模型。这种情况经常出现在需要创建层次结构、多对多关系或者需要查询自引用表格和树的情况下。
在 Laravel 中,可以使用自引用关系和查询构建器来查找同一模型中的模型。接下来,将介绍如何在 Laravel 中查找同一模型中的模型。
在 Laravel 中,自引用关系允许模型与自身关联。这种关系允许在同一模型中查找其他模型。例如,可以在 Category 模型中创建 self-referential 关系,以便可以在同一模型中查找子分类。
自引用关系可使用以下方法定义:
// Category model
public function children()
{
return $this->hasMany(Category::class, 'parent_id', 'id');
}
public function parent()
{
return $this->belongsTo(Category::class, 'parent_id');
}
以上代码演示了如何在 Category 模型中创建自引用关系。children() 方法定义了模型的子模型关系,而 parent() 方法定义了模型与其父模型之间的关系。
可以使用以下命令来访问模型的子模型和父模型:
$category = Category::find(1);
// Find children
$children = $category->children;
// Find parent
$parent = $category->parent;
除了自引用关系之外,Laravel 还提供了查询构建器,用于在同一模型中查找模型。
例如,如果需要查找评论的所有回复,可以使用以下代码:
// Comment model
public function replies()
{
return $this->hasMany(Comment::class, 'parent_comment_id');
}
// Retrieve all replies to a comment
$comment = Comment::find(1);
$replies = $comment->replies;
还可以在查询构建器中指定需要使用的列,例如:
// Retrieve only the replies' bodies and authors
$replies = $comment->replies()->select('body', 'author')->get();
通过使用自引用关系和查询构建器,可以轻松地在同一 Laravel 模型中查找模型。无论您是要创建层次结构,多对多关系还是需要查询自引用表格和树,都可以使用这些技术。