2017-12-23 6 views
3

ich eloquent wie ORM verwenden und ich möchte wie diese where in Multi-Table verwenden:Schreib orWhere für Multi-Tabellen in beredten

$raw_query = EntityCity::with(['province']); 
     $raw_query = $raw_query->where(function ($q) use ($search_data) { 
      $q->where('city.title' , 'like' , "%$search_data%") 
      ->orwhere('province.title' , 'like' , "%$search_data%"); 
     }); 
    } 
    $this->data[ 'result_list' ] = $raw_query->limit($this->per_page) 
              ->orderByDesc("time_insert") 
              ->offset(($page_num - 1) * $this->per_page) 
              ->get(); 

jedoch begegne mir die folgenden Fehler:

Message: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'province.title' in 'where clause' (SQL: select count(*) as aggregate from city where (city . title like %fars% or province . title like %fars%))

Wenn ich die orwhere kommentieren funktioniert es.

Also wie können Sie dies mit orwhere schreiben?

+0

Es ist nicht das selbe meine Frage ist, wie man orwhere in der verbundenen Tabelle benutzt – hamidreza

Antwort

1

Statt:

$raw_query = $raw_query->where(function ($q) use ($search_data) { 
     $q->where('city.title' , 'like' , "%$search_data%") 
     ->orwhere('province.title' , 'like' , "%$search_data%"); 
    }); 
} 

Sie verwenden sollten:

$raw_query = $raw_query->where(function($q) { 
    $q->where('city.title', 'like', "%$search_data%") 
     ->orWhereHas('province', function ($q) use ($search_data) { 
      $q->where('province.title' , 'like' , "%$search_data%"); 
     }); 
}); 

Beachten Sie, dass die in dem .. orWhereHas wurde in weiteren hier gewickelt where und das gibt Ihnen Vertrauen, dass Sie andere Bedingungen wie für exa hinzufügen können mple Auswahl nur aktive Städte:

$raw_query = $raw_query->where(function($q) { 
    $q->where('city.title', 'like', "%$search_data%") 
     ->orWhereHas('province', function ($q) use ($search_data) { 
      $q->where('province.title' , 'like' , "%$search_data%"); 
     }); 
})->where('active', 1); 
1

Versuchen zu verwenden orWhereHas:

$raw_query = $raw_query->where('city.title', 'like', "%$search_data%") 
     ->orWhereHas('province', function ($q) use ($search_data) { 
      $q->where('province.title' , 'like' , "%$search_data%"); 
     });