在Model方法中创建条件

时间:2018-06-14 15:39:30

标签: php laravel laravel-5 eloquent

大家好我想在我的分类模型上创建一个自定义方法,但我需要用它创建一些条件。

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();

2 个答案:

答案 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);