Laravel - 模型修改

时间:2015-10-09 07:42:30

标签: php laravel

我需要重构项目,我有问题。以下是旧的,有效的工作模式,其中有活跃的'专栏在"人员"表。我需要移动活跃的'专栏" people_translations"表。 你有什么想法来修改scopeActive方法吗? 非常感谢!

旧工作模式:

class BaseModel extends Eloquent
{
    public function scopeActive($query)
    {
        return $query->where($this->table . '.active', '=', 1);
    }    
}

class People extends BaseModel
{
    protected $table = 'peoples';
    protected $translationModel = 'PeopleTranslation';
}

class PeopleTranslation extends Eloquent
{
    public $timestamps = false;
    protected $table = 'peoples_translations';
}

旧表结构:

Table: peoples
id | type | date | active
-------------------------
7 | .... | ...   | 1


Table: peoples_translations
id | people_id | language_id | name
-----------------------------------
1 |          7 |          1  | Ann

旧查询:

$ peoples = \ People :: active() - > get();

新表格结构:

Table: peoples
id | type | date
----------------
7 | .... | ...  

表:peoples_translations

id | people_id | language_id | name | active
--------------------------------------------
1 |          7 |          1  | Ann  |      1

1 个答案:

答案 0 :(得分:1)

为人物模型

内的翻译创建关系
public function translations()
{
    return $this->hasMany('PeopleTranslation', 'people_id');
}

在人物模型中创建活动范围

public function scopeActive($query)
{
    return $query->whereHas('translations', function($query) {
        $query->where('active', 1);
    });
} 

它将为此表创建子查询,因此它将获得位置(active = 1的翻译计数)> 0

如果你有一对一的关系 - 寻找hasOne关系方法而不是hasMany。