2017-09-14 60 views
0

我想爲我的表做一個簡單的搜索功能。該表從兩個mssql [Addresses]和[Companies]表中獲取數據。這些表格有一對一的關係。Laravel中的一對一關係搜索功能5.4

class Addresses extends Model 
{ 
    protected $table = "Addresses"; 
    protected $primaryKey = 'adress'; 
    public $timestamps = false; 

    public function scopeSearchAddress($query, $searchTerm) 
    { 
     return $query->where('city', 'LIKE', '%'.$searchTerm.'%') 
        ->orWhere('name', 'LIKE', '%'.$searchTerm.'%') 
        ->orWhere('street', 'LIKE', '%'.$searchTerm.'%'); 
    } 

    public function company() 
    { 
     return $this->hasOne(Company::class, 'adress'); 
    } 

這種關係是一個地址一家公司。 第一個表格地址有名稱,街道,城市列,第二個表格有compName,compType。

class Company extends Model 
{ 
    protected $table = "Company"; 
    protected $primaryKey = 'Adresse'; 
    public $timestamps = false; 

    public function addresses() 
    { 
     return $this->belongsTo(Addresses::class, 'adress'); 
    } 

} 

這是兩個模型。控制器是這樣的:

class AddressesController extends Controller 
{ 
    public function index(Request $request) 
    { 
     $searchTerm = $request->input('searchTerm'); 

     $addresses = Addresses::whereHas('compan', function($query) { 
      $query->where('compType','D'); 
     })->orderBy('Name') 
     ->searchAddress($searchTerm) 
     ->paginate(60); 
     return view('asdress.index', compact('addresses', 'searchTerm')); 
    } 
} 

我可以搜索第一個表後列(城市,名稱,街道)。但我如何搜索像compName這樣的第二個表格列之後。

回答

1

只需在whereHas即將結束時爲每個要搜索的公司表字段添加orWhere

$searchTerm = $request->input('searchTerm'); 

$addresses = Addresses::whereHas('company', function($query) use($searchTerm){ 
    $query->where('compType','D') 

    //append other where queries on company fields 
    ->orWhere('company_table_field_name', $searchTerm); 
}); 
+0

你好,你忘記了功能後使用($ searchTerm),但這也不起作用。 –

+0

@GregOstry感謝您指出了這一點...我的壞...編輯我的答案 –