2015-02-03 3 views
0

Я создаю фильтр, и мне нужно добавить к модели атрибут, который не существует, а затем использовать его для фильтрации таблицы. Я пытаюсь с where(), но проблема в том, что он не нашел добавленный атрибут. Вот пример кода:Laravel Eloquent ORM-фильтрация с добавленным атрибутом

<?php 

class School extends Eloquent { 

    protected $table = 'schools'; 
    protected $appends = array('municipality_id'); 

    public function getMunicipalityIdAttribute() 
    { 
     return City::find($this->city_id)->municipality_id; 
    } 

    public function listSchoolsEndUser() 
    { 
     $schools_data = new School; 

     if (Input::has('municipality')) { 
      $schools_data = $schools_data->where('municipality_id', '=', Input::get('municipality')); 
     } 

     $schools_data = $schools_data->paginate(12); 

     return $schools_data; 
    } 
} 

Ошибка:

SQLSTATE[42S22]: Column not found: 1054 Unknown column municipality_id' in 'where clause' (SQL: select count(*) as aggregate from `schools` where (`specialties` like %"5"%) and `municipality_id` = 6) 
+2

Я не знаю, как district_id приходит в него в сообщении об ошибке - это должно быть municipality_id в этом примере? – Apemantus

+0

да это моя ошибка, извините – mertindervish

ответ

3

Пользовательские атрибуты не существуют в вашей БД, следовательно, вы не можете использовать их в запросах SQL.

Почему бы вам просто не определить связь для City и фильтровать с этим?

И потом:

$schools_data = new School; 

    if (Input::has('municipality')) { 
     $schools_data->whereHas('city', function($q){ 
      $q->where('municipality_id', '=', Input::get('municipality')); 
     }); 
    } 

    $schools_data = $schools_data->paginate(12);