2017-02-25 8 views
0

私はクエリのwhere句が尊重されないという問題があります。これは私が使用していますクエリです:私はvardumpを行う場合where節は尊重されていませんか?

Capsule::table('tblhosting') 
     ->select('*','tbldomains.nextduedate as domainnextduedate' , 'tblhosting.nextduedate as hostingnextduedate') 
     ->join('tblclients', 'tblhosting.userid', '=', 'tblclients.id') 
     ->join('tbldomains', 'tblhosting.domain', '=', 'tbldomains.domain') 
     ->where('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate') 
     ->where('tbldomains.status', '=', 'Active') 
     ->where('tblhosting.termination_date', '=', '0000-00-00')    
     ->get() 

、私はこれらの値を取得する:

[56] => stdClass Object 
    (
     [id] => 406 
     [userid] => 9 
     [orderid] => 730 
     [packageid] => 35 
     [server] => 9 
     [regdate] => 2016-12-23 
     [domain] => xxx.net 
     [paymentmethod] => banktransfer 
     [firstpaymentamount] => 0.00 
     [amount] => 0.00 
     [billingcycle] => Annually 
     [nextduedate] => 2017-12-23 
     [nextinvoicedate] => 2017-12-23 
     [termination_date] => 0000-00-00 
     [completed_date] => 0000-00-00 
     [domainstatus] => Active    
     [domainnextduedate] => 2017-12-23 
     [hostingnextduedate] => 2017-12-23 
    ) 

あなたが見ることができるように、tbldomains.nextduedateとtbldomains.nextduedateは「両方とも2017- 12-23' 、私は

->where('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate') 

を使用するので、私は別名を使用しているため、それができると思ったが、私は

をしようとすると、彼らは返却されていないはずですので、私は、私が行方不明です何かわからない

Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'domainnextduedate' in 'where clause'' 

..

ありがとう:3210

->where('domainnextduedate', '!=', 'hostingnextduedate') 

私はPDOのエラーが発生します!

+0

それは時間のコンポーネントが異なることは可能ですか?また、日付を '0000-00-00'と比較するあなたの意図は何ですか?これは私には意味がないようです。 –

+0

私は構造をチェックしており、両方とも標準の 'date' formateにあります。違いは、1の場合はデフォルト値が0000-00-00で、もう1つのデフォルト値がNULLの場合のみです。しかし、これはすべてが埋め込まれているので、違いはありません。 "どこに( 'tblhosting.termination_date'、 '='、 '0000-00-00')"という意味なのでしょうか?そのフィールドが0000-00-00の場合、ホスティングパッケージは終了しません。値が含まれている場合は終了します。 – mitch2k

+0

2テーブルの 'nextduedate'カラムのタイプは何ですか? –

答えて

2

あなたはこのコードを試してみることができます。

->whereColumn('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate') 
+0

それは動作します!本当にありがとう! – mitch2k

+0

喜んで..いつもの 'where'節は3番目のパラメータを文字列とみなしていることに注意してください。 –

1

問題は、右の列が列であると考えるのではなく、文字列として解析するので、whereの結果は2017-12-23 = tbldomains.nextduedateに解析されます。この問題を回避するにはwhereRawを使用する必要があります。 Laravelで

->whereRaw('tblhosting.nextduedate <> tbldomains.nextduedate') 

EDIT

クエリで日付を扱うときは、whereDateを使用しています。だからあなたのクエリは次のようになります。

->whereDate('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate') 
+0

私はこれを試しました: - > whereDate( 'tblhosting.nextduedate'、 '!='、 'tbldomains.nextduedate')、それでも同じですが私は恐れています – mitch2k

+1

クエリログ? DB :: enableQueryLog(); DB :: getQueryLog() –

+0

戻り値: [query] => select *、 'tbldomains'.nextduedate'を' domainnextduedate'、 'tblhosting''nextduedate'を' hostingnextduedate'、 'tbldomains'.id '' domainid'、 '' tblhosting''、 '' tblhosting''から '' tblhosting''内の '' tblhosting''内の 'hostingid'で' 'tblhosting''、' ' '.'domain' =' tbldomains'.domain'ここで、date( 'tblhosting'.nextduedate')は?=? [バインディング] =>配列 ( [0] => tbldomains.nextduedate ) [時間] => 9.77 ) – mitch2k

関連する問題