2014-12-10 4 views
5

Проблема: Я хочу получить Клиентов только в том случае, если они уже разместили заказ на текущий год. Клиенты и ордера находятся на двух отдельных Базах данных (это не может измениться). Все отношения настроены и работают правильно, но когда я пытаюсь сделать следующее, я продолжаю получать SQL-ошибку, поскольку пытается найти «заказы» в базе данных «клиентов». Есть ли способ заставить Laravel использовать правильную базу данных в этом сценарии?Laravel whereHas через две отдельные базы данных

$customers = $customers->whereHas('orders', function($query){ 
    $query->where('academic_year_id', '=', $this->current_academic_year->id); 
}); 

$customers = $customers->orderBy('DFKEY','ASC')->get(); 

заказа Модель:

public function customer() 
{ 
    return $this->belongsTo('Customer','dfkey'); 
} 

Клиент Модель:

protected $connection = 'mysql2'; 

public function orders() 
{ 
    return $this->hasMany('Order','dfkey','DFKEY'); 
} 

Заранее спасибо!

+0

звучит как есть проблема с отношениями , заказы принадлежат ToMany отношения с клиентами? Вам нужна функция заказов в модели Customer. Также мне кажется, что вам нужно получить оператор в конце, чтобы фактически вернуть результаты. –

+0

Спасибо за ответ. Я обновил свой оригинальный вопрос более подробно ... – Pedro

+0

http: // fideloper .com/laravel-multiple-database-connections – Sachin

ответ

0

Попробуйте написать запрос, как это и поместить вашу базу данных и имя_таблицы, как это это->

$customers = Schema::connection('your_database_name')::table('respective_table_name') 
->where('academic_year_id', '=', $this->current_academic_year->id) 
->orderBy('DFKEY','ASC') 
->get(); 
+0

и, пожалуйста, дайте мне знать, какова структура таблицы заказа и таблицы клиентов, я могу измерить, как сохранить данные. поэтому я могу уточнить на нем.Сначала, что вам нужно было бы получить из этой таблицы, а затем изменить базу данных и запустить второй запрос для информации cursotmer, такой как имя, адрес электронной почты, номер телефона. – Sachin

0

решаемые это с помощью фильтра:

public function index() 
{ 
    $customers = new Customer; 
    // Make sure customers are current parents of students 
    $customers = $customers->whereHas('students', function($q) { 
     $q->where('STATUS', '=', 'FULL'); 
    }); 

    //Filter results 
    if(Input::get('academic_year') == 'ordered'){ 
     $customers = $customers->orderBy('DFKEY','ASC')->get(); 
     $filtered = $customers->filter(function($customer) 
     { 
      if ($customer->orders()->where('academic_year_id','=',$this->current_academic_year->id)->first()) { 
       return true; 
      } 
     }); 
     $customers = $filtered; 
     return View::make('admin.customers.index',compact('customers')); 
    } 

    $customers = $customers->orderBy('DFKEY','ASC')->get(); 

    return View::make('admin.customers.index',compact('customers')); 
} 
Смежные вопросы