2015-12-02 3 views
0

Я знаю, где возникает следующая ошибка, но я не знаю, как ее исправить.Laravel отношение поиск функция

Ошибка:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'expenses.date' in 'where clause' (SQL: select count(*) as aggregate from expenses_sections where expenses . date LIKE %2015-12%)

Что вызывает это (в моем контроллере):

if($view === 'section') { 
    $query = Section::query(); 
     $query->with(['expenses' => function($query) use ($search){ 
      $query->where('date', 'LIKE', '%2015-' . $search . '%')->get(); 
     }]); 
} 

У меня есть меню выбора, который я использую, чтобы изменить макет страницы. У меня есть другое меню, которое я использую для отображения результатов только с определенного месяца. Вышеупомянутая ошибка - это то, что я получаю, когда я выбираю месяц, потому что запрос ищет неправильную таблицу (из-за вышеприведенного кода). Результаты отображаются с использованием соотношения между расходами и разделами. В основном я хочу искать результаты в таблице expenses вместо таблицы expenses_sections, конечно, не нарушая отношения, потому что на основе отношения отображается мой макет.

расходов Модель:

class Expense extends Model 
{ 
    public function section() 
    { 
     return $this->belongsTo('App\Http\Models\Expenses\Section'); 
    } 
} 

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

class Section extends Model 
{ 
    public function expenses() 
    { 
     return $this->hasMany('App\Http\Models\Expenses\Expense'); 
    } 
} 
+0

Имеет ли 'счет' поле' date'? –

+0

Если у вас есть costs_sections, у которого есть расходы_id и section_id, вы должны использовать hasManyThrough(), но я всегда стараюсь получить эти рабочие в первый раз, вместо того, чтобы пытаться ответить на него, прочитать это в ожидании лучшего ответа: http: //laravel.com/docs/5.1/eloquent-relationships#has-many-through – markdwhite

+0

Удивительно, лучше, конечно, прочесть его самостоятельно, вместо того чтобы получить ответ, который я могу использовать сразу, поэтому я благодарю вас! :) – Hardist

ответ

1

ограничения запроса должны всегда возвращать экземпляр построителя запросов. Вы не должны вызывать get в пределах вашего закрытия так попытайтесь фиксируя это так:

$query = Section::query(); 
$query->with(['expenses' => function($query) use ($search) { 
    $query->where('date', 'LIKE', '%2015-' . $search . '%'); 
}]); 

Это будет получать все секции и нетерпеливый нагрузку на отношения. Те, которые не соответствуют ограничениям, будут иметь только пустое отношение expenses. Если вам нужны только разделы, соответствующие ограничениям, вы должны использовать метод whereHas.

$query = Section::query(); 
$query->with('expenses')->whereHas('expenses', function($query) use ($search) { 
    $query->where('date', 'LIKE', '%2015-' . $search . '%'); 
}); 
+0

Спасибо за ваш ответ. Я обнаружил, что ошибка была где-то в другом месте, поэтому я исправил ее сам, пытаясь использовать ваш ответ. По-прежнему отмечен это как принято. – Hardist

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

  • Нет связанных вопросов^_^