2015-03-07 21 views
6

Tôi có một mô hình hùng hồn như,Laravel tìm kiếm hùng hồn về lĩnh vực mô hình liên quan

tài: người dùng (id, tên người dùng, mật khẩu, email, status)

Hồ sơ: hồ sơ (id, user_id, first_name, last_name, giới tính, dob)

Trong logic bộ điều khiển, tôi đang háo hức tải mô hình Cấu hình.

tôi có thể làm được điều này,

$user = User::with('Profile')->get(); 

hoặc

$user = User::with('Profile')->where('status', '1')->get(); 

nhưng làm thế nào để làm một cái gì đó như thế nào,

$user = User::with('Profile')->where('status', '1')->where('gender', 'Male')->get(); 

Trả lời

21

Đó là nơi whereHas có ích:

$user = User::with('Profile')->where('status', 1)->whereHas('Profile', function($q){ 
    $q->where('gender', 'Male'); 
})->get(); 

Về cơ bản nó bổ sung thêm điều kiện mà người dùng cần phải có một hồ sơ với gender = Male

+0

nếu tôi cần làm "hoặc ở đâu" vào bảng hồ sơ có liên quan làm cách nào tôi có thể thực hiện việc này? sẽ $ q-> hoặcWhere ('giới tính', 'Nam') hoạt động? –

+0

Có lẽ bạn muốn 'orWhereHas ('Hồ sơ', ...' – lukasgeiter

+0

cảm ơn, một câu hỏi nữa, trong phương pháp đóng nếu tôi cần hai hoặc nhiều hơn "hoặc ở đâu" điều kiện, sau đó mã sau đây không hoạt động. 'Hồ sơ', function ($ q) { $ q> ở đâu ('field3', 'như', '% giá trị%'); $ q> orWhere ('Field4', 'như', '% giá trị % '); }) –

1

Nếu bạn muốn tìm kiếm nhiều cột trong mô hình quan hệ.

 $searchText = 'test text'; 
     Product::with('owner')->where(function($query) use ($searchText) 
     { 
      $query->where('product_name', 'LIKE', '%' . $searchText . '%'); 

      $columns = ['product_code', 'place_location', 'remark']; 

      foreach ($columns as $column) { 
       $query->orWhere($column, 'LIKE', '%' . $searchText . '%'); 
      } 

      $query->orWhereHas('owner', function($q) use ($searchText) { 
       $q->where(function($q) use ($searchText) { 
        $q->where('name', 'LIKE', '%' . $searchText . '%'); 
        $q->orWhere('company_name', 'LIKE', '%' . $searchText . '%'); 
       }); 
      }); 

     }); 
Các vấn đề liên quan