如何渴望加载自定义关系?

时间:2019-04-18 07:26:41

标签: laravel

我有一个statuses表,我在其中存储多个模型(表)的状态。例如:

comments
id | status | text    | ... 
---------------------------
1  | 2      | great.. |
2  | 3      | thats.. |

posts
id | status | body | ...
---------------------------
1  | 4      | hey..| 
2  | 5      | i w..|

statuses
id | type    | title     | ...
---------------------------
1  | comment | succes    |
2  | comment | error     | 
3  | comment | published |
4  | post    | deleted   |
5  | post    | pending   |

在这里,我能够与belongsTo关系访问相应的记录。

class Post extends Model {
    public function status()
    {
        return $this->belongsTo(Status::class, ....);
    }
}

但是我想要的是急于加载评论的状态选项,以便我可以下拉或类似内容。我可以使用where创建一个自定义关系,但并不急于加载。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以为此使用Local Scopes

状态模型

class Status extends Model
{
    public static $COMMENT_STATUS = 'comment';
    public static $POST_STATUS = 'post';

    public function scopeForComments($query)
    {
        return $query->where('type', self::$COMMENT_STATUS);
    }

    public function scopeForPosts($query)
    {
        return $query->where('type', self::$POST_STATUS);
    }
}

然后,在您的控制器中:

MyController.php

Status::forComments()->get(); //List up all the statuses for comments
Status::forArticles()->get(); //List up all the statuses for articles