2014-10-01 3 views
1

В принципе я уже полиморфный таблица, которая выглядит следующим образом:Фильтр полиморфного Таблица

Polytable 
-------- 

id 
type 
polyable_type 
polyable_id 

И полиморфный класс woly Eloquent выглядит следующим образом:

class poly extends Eloquent { 
    .... //eloquent attributes and stuff 

    public function polyable() 
    { 
     return $this->morphTo(); 
    } 
} 

И стандартный класс woly Eloquent является следующим образом:

class woly extends Eloquent{ 
    ... //skipped most eloquent stuff 

    public function poly() 
    { 
     return $this->morphMany('poly','polyable'); 
    } 
    public function polyTypeOne() 
    { 
     return $this->poly()->where('type','=','1')->get(); 
    } 
} 

Теперь, я хочуПолиморфное отношениеpoly() для возврата только пунктов, где type столбец в Polytable is 1.

До сих пор я ударил в проблему производительности базы данных, с функцией polyTypeOne()

Пример использования функции polyTypeOne

$wollies = woly::all(); 
foreach($wollies as $w) 
{ 
    $w->polyTypeOne = $w->polyTypeOne(); 
} 

Что является лучшим способом для выполнения такой функции?

+0

Какие проблемы с производительностью и где выполняется код? –

+0

Проще говоря, я не могу использовать 'woly :: with ('polyTypeOne') -> all()' для активной загрузки, учитывая, что это не функция отношений. – Mysteryos

+0

Ну, этот кусок не может работать, потому что 1 'all' является статическим методом модели, 2' polyTypeOne' не является отношением. Но удалите 'get()' из него, и он будет работать так, как ожидалось. Во всяком случае, до сих пор нет проблем с производительностью, если вы не ссылаетесь на невозможность использования загруженной загрузки. –

ответ

3
public function polyTypeOne() 
{ 
    return $this->poly()->where('type','=','1'); 
} 

// usage 
$wollies = Woly::with('polyTypeOne')->get(); 

// pretty much the same as: 
$wollies = Woly::with(['poly' => function ($q) { 
    $q->where('type', 1); 
}])->get(); 
+0

Не могу поверить, что это работает. U на самом деле узнает новый материал от красноречивого каждодневного ... Спасибо человеку. – Mysteryos

+2

зайдите сюда, чтобы узнать больше о красноречиве http://www.softonsofa.com –

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