2015-10-09 4 views
1

Мне нужен рефакторинг проекта, и у меня есть проблема. Ниже приведена старая рабочая модель, где столбец «active» находится в таблице «people». Мне нужно переместить «активный» столбец в таблицу «people_translations». У вас есть идея изменить scopeActive метод? Спасибо большое!Laravel - модификации модели

Старый рабочая модель:

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 

Старый запрос:

$ народов = \ Люди :: активный() -> получить();

Новые таблицы структуры:

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

Таблица: peoples_translations

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

Я не понимаю, почему именно вам нужна дополнительная таблица. В каких отношениях «люди» и «народность»? hasOne? имеет много? – Tim

+0

Тим, есть много языков для многих языков, поэтому hasMany – Paul

ответ

1

Создать соотношение для переводов внутри People Model

public function translations() 
{ 
    return $this->hasMany('PeopleTranslation', 'people_id'); 
} 

Создать активную сферу в народной модели

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

Это сделает подзапрос для этой таблицы, и в результате он будет получать где (количество переводов с активным = 1)> 0.

Если у вас есть один-к-одному отношения - ищите hasOne метода соотношения вместо hasMany.

+0

Спасибо за помощь Silwerclaw :) – Paul

Смежные вопросы