2016-06-16 1 views
1

중첩 된 검색 쿼리를 만들려고하지만이 오류가 발생합니다. company_id로 가입 한 회사 이름을 검색하려고합니다.Laravel 5 중첩 검색 쿼리

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'company.name' in 'where clause' (SQL: select count(*) as aggregate from `position` where `to_date` >= 2016-06-16 and `company_id` = 123795854693734 and `title` like %searchquery% and `company`.`name` like %searchquery% and `location` like %%) 

여기 모델은 완벽하게 작동 내 컨트롤러 기능

public function Search(){ 

    $keyword = Input::get('q'); 
    $location = Input::get('l'); 

    $data = Position::where('to_date', '>=', date('Y-m-d')) 
    ->where('company_id', '=', $company_id) 
    ->where('title', 'like', '%'.$keyword.'%') 
    ->where('company.name', 'like', '%'.$keyword.'%') 
    ->where('location', 'like', '%'.$location.'%') 
    ->orderBy('from_date', 'desc') 
    ->paginate(10); 

    $data = array(
     'data' => $data, 
    ); 

    return view('myview', $data); 

} 

입니다. 하지만 어쨌든 여기에 있습니다.

namespace App; 
use Illuminate\Database\Eloquent\Model; 

class Position extends Model { 
    protected $table = 'position'; 
    protected $guarded = array("id"); 
    protected $hidden = array(); 
    protected $appends = array('local_ad'); 

    protected $fillable = ['title', 'company_id', 'location']; 

    public function company() { 
     return $this->belongsTo('App\Company', 'company_id', 'id'); 
    } 

} 
+0

Laravel에도 익숙하지 않지만 오류 및 코드는 회사 테이블에 대한 가입이 누락되었다고 제안합니다. – Oldskool

답변

2

실제로 관계를 사용하거나 회사 테이블에 가입하지 않으므로 찾을 수 없습니다.

단순히 whereHas 메서드를 사용하여 회사 이름으로 위치를 필터링 할 수 있습니다.

$data = Position::whereHas('company', function ($q) use ($keyword) { 
    $q->where('name', 'like', '%'.$keyword.'%'); 
})->where('to_date', '>=', date('Y-m-d')) 
    ->where('company_id', '=', $company_id) 
    ->where('title', 'like', '%'.$keyword.'%') 
    ->where('location', 'like', '%'.$location.'%') 
    ->orderBy('from_date', 'desc') 
    ->paginate(10); 
1

이 기능은

공공 기능 검색() {

$keyword = Input::get('q'); 
$location = Input::get('l'); 

$data = Position::where('to_date', '>=', date('Y-m-d')) 
->where('company_id', '=', $company_id) 
->where('title', 'like', '%'.$keyword.'%') 
->with(['company' => function($q) use ($keyword) { 
    ->where('name', 'like', '%'.$keyword.'%') 
}]) 
->where('location', 'like', '%'.$location.'%') 
->orderBy('from_date', 'desc') 
->paginate(10); 

$data = array(
    'data' => $data, 
); 

return view('myview', $data); 

해야하지만, 이것은이 위치를 가져옵니다 가입하지 않는, 웅변에 whereHas이, 당신은해야 그것도 탐구해라.