2017-12-06 10 views
2

나는 나의 database.In에 user_webhook 테이블에서 템플릿을 얻으려면 WHERE 조건 내가 USER_ID, APP_ID을 확인하고 하나 notify_admin 또는 notify_customer 값이 쿼리를 사용하고 user_webhook의 테이블에 배치 1 인 경우입니다 ..Laravel Model 또는 어디에서 조건을 사용합니까?

$templates= $this->where('notify_admin',1) 
       ->orwhere('notify_customer',1) 
       ->where('user_webhooks.user_id',$user_id) 
       ->where('user_webhooks.app_id',$app_id) 
       ->select( 'webhooks.id as webhook_id','webhooks.app_id','webhooks.topic','webhooks.type','webhooks.action', 
          'webhooks.sms_template','user_webhooks.id','user_webhooks.notify_admin', 
          'user_webhooks.notify_customer','user_webhooks.user_id','user_webhooks.sms_template_status', 
          'user_webhooks.sms_template as sms' 
         ) 
       ->join ('webhooks',function($join){ 
         $join>on('webhooks.id','=','user_webhooks.webhook_id'); 
         }) 
       ->get() 
       ->toArray(); 

내가 DB :: getQueryLog()를 사용하여 쿼리를 얻을 때, 나는 쿼리가

select `telhok_webhooks`.`id` as `webhook_id`, `telhok_webhooks`.`app_id`, 
`telhok_webhooks`.`topic`, `telhok_webhooks`.`type`, `telhok_webhooks`.`action`, 
`telhok_webhooks`.`sms_template`, `telhok_user_webhooks`.`id`, 
`telhok_user_webhooks`.`notify_admin`, `telhok_user_webhooks`.`notify_customer`, 
`telhok_user_webhooks`.`user_id`, `telhok_user_webhooks`.`sms_template_status`, 
`telhok_user_webhooks`.`sms_template` as `sms` from `telhok_user_webhooks` 

inner join 
`telhok_webhooks` on `telhok_webhooks`.`id` = `telhok_user_webhooks`.`webhook_id` 

    where `notify_admin` = ? or `notify_customer` = ? and `telhok_user_webhooks`.`user_id` 
    = ? and `telhok_user_webhooks`.`app_id` = ? 

모든 APP_ID 및 USER_ID의 결과를 제공하는 쿼리의 결과처럼 보인다 발견했다. 그래서 어디서 OR을 사용하는지 말해주십시오. 미리 감사드립니다.

답변

0

제약 조건을 함께 연결하고 쿼리에 추가 또는 절을 연결할 수 있습니다. orWhere 방법은 어디 방법과 동일한 인수를 받아 :

$users = DB::table('users') 
       ->where('votes', '>', 100) 
       ->orWhere('name', 'John') 
       ->get(); 

고급 사용 :

Usere::where('id', 46) 
     ->where('id', 2) 
     ->where(function($q) { 
      $q->where('Cab', 2) 
      ->orWhere('Cab', 4); 
     }) 
     ->get(); 

있어서 주어진 컬럼의 값이 소정의 배열에 포함되어 있는지 확인있어서

$users = DB::table('users') 
        ->whereIn('id', [1, 2, 3]) 
        ->get(); 

기타 : https://laravel.com/docs/5.5/queries

+0

감사합니다 선생님의 예를 유용 두 열을 비교하는 대신 쿼리에서 다른 모든 알의 비교됩니다. – ShaanSetia

+0

선생님 나는 stackoverflow에서 적은 평판을 가지고, 지금은 단지 당신에게 보상으로 감사를 줄 수 있습니다. – ShaanSetia

+0

선생님은 또한 15 가지 명성이 필요하다고 지적합니다. – ShaanSetia

1

변경

->where('notify_admin',1) 
->orwhere('notify_customer',1) 

이없이

->where(function($q){ 
    $q->where('notify_admin',1) 
    ->orWhere('notify_customer',1); 
}) 

하려면 orWhere은

+0

감사합니다. 예가 유용합니다. – ShaanSetia