我需要重构项目,我有问题。以下是旧的,有效的工作模式,其中有活跃的'专栏在"人员"表。我需要移动活跃的'专栏" 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
答案 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。