2014-05-09 19 views
7

Trong Laravel, tôi có hai bảng có tên là Booking và Clients. Đối với một đặt phòng cụ thể, tôi có mối quan hệ thuộc Về với một khách hàng duy nhất. Mọi thứ hoạt động tốt khi tôi truy vấn khách hàng để đặt chỗ trừ khi tôi bao gồm orWhere. Vui lòng xem đoạn mã bên dưới.hoặcWhere không hoạt động với truy vấn mối quan hệ eloquent Laravel

if($client_name!=null) 
     { 
      $client_name='%'.$client_name; 
      $bookings=$bookings->whereHas('client',function($q) use ($client_name){ 
       $q->where('first_name','LIKE',$client_name) 
        //->orWhere('last_name','LIKE',$client_name);     
      }); 
     } 

Với nhận xét ra dòng orWhere, tôi nhận được đặt chỗ phù hợp với khách hàng với first_name theo quy định của người dùng. Nhưng khi tôi sử dụng hoặc trong truy vấn cho last_name, tất cả các hàng được hiển thị như thể last_name khớp với mỗi hàng.

Có vấn đề gì với nó? Xin vui lòng giúp đỡ.

+0

Kiểm tra truy vấn đang chạy với 'DB :: getQueryLog()' ví dụ –

+0

Sau đây là kết quả cuối cùng: chọn * từ 'ga' trong đó' user_id' =? giới hạn 1. Tôi đang sử dụng gói Sentry để xác thực. Truy vấn ở trên được chạy trong trang quản trị. – sangam

+0

Điều này không cho chúng tôi biết bất cứ điều gì, hãy kiểm tra bảng cho bảng 'clients'. Đơn giản chỉ cần chạy mã bạn dán và ngay lập tức 'dd (DB :: getQueryLog())' hoặc đơn giản là làm điều đó trong CLI với nghệ nhân tinker –

Trả lời

9

Vấn đề là bạn có mã như bây giờ:

WHERE foreignKey = X AND first_name = Y OR last_name = Z 

Vì vậy, rõ ràng là nó không trở về những gì nó cần.

Bây giờ, để làm cho nó hoạt động, bạn cần phải thêm những khó khăn như một tiểu nơi:

$bookings=$bookings->whereHas('client',function($q) use ($client_name){ 
      $q->where(function ($q) use ($client_name) { 
       $q->where('first_name','LIKE',$client_name) 
        ->orWhere('last_name','LIKE',$client_name); 
      }); 
     }); 

này sẽ cho kết quả trong một truy vấn như:

WHERE foreignKey = X AND (first_name = Y OR last_name = Z) 

đó là những gì bạn cần.

+0

Làm việc như một sự quyến rũ! Cảm ơn bạn. – sangam

Các vấn đề liên quan