大家好我想在我的分类模型上创建一个自定义方法,但我需要用它创建一些条件。
table post:
- id;
- category_id
-name...
table Category:
- id
- parent_id
- name
想象我有一个帖子,在这篇文章中有一个名为SomeSubcategoryName的类别,我的帖子表我有一个名为category_id的列。
当我调用帖子记录时,我与类别模型有关系,但我希望在我的类别模型中有一个名为masterCategory的方法,其中我通过检查parent_id是否为null来给出mster类别,以防万一如果记录的parent_id为null,我会返回记录,但如果不是,我需要使用parent_id值并在模型类别列id上搜索记录并返回结果。
想象一下这种情况:
$post = Post::find(2);
//此调用应返回主类别,而不是子类别信息。
$post->masterCategory();
答案 0 :(得分:0)
在您的类别模型中定义自身的关系:
public function masterCategory()
{
return $this->belongsTo(App\Category::class, 'parent_id', 'id');
}
在您查询时,急切加载Post
上的关系:
$post = Post::with(['category', 'category.masterCategory'])->firstOrFail($id);
像这样访问它:
$post->category->masterCategory; // will be the mastery category or null
否则我们:
$post->category;
不要过分复杂化。
答案 1 :(得分:0)
在你的分类模型中你应该有这样的东西
public function master()
{
return $this->belongsTo(Category::class, 'parent_id');
}
public function isMaster()
{
if($this->parent_id)
return false;
else
return true;
}
现在您可以检查帖子的类别是否为主:
if($post->category->isMaster())
....
第二种方式是使用关系和雄辩的
$post = Post::with(['category', 'category.master'])->first($id);