यह कुछ "मुश्किल" है। phpmyadmin में आप जो क्वेरी निष्पादित कर रहे हैं, वह वास्तव में सही है। हालांकि, लारवेल where()
. का उपयोग करता है और on()
अलग तरह से।
where()
का उपयोग करें एक मान के साथ और on()
कॉलम के साथ काम करते समय।
$times = Time::join(\DB::raw('(SELECT `ath_id`, `stroke_id`, MIN(time) AS time FROM times GROUP BY ath_id, stroke_id) b'), function($join) {
$join->on('times.ath_id', '=', 'b.ath_id')
->on('times.stroke_id', '=', 'b.stroke_id')
->on('times.time', '=', 'b.time');
})
->where('times.ath_id', '=', $id)
->orderBy('times.stroke_id', 'ASC')
->orderBy('times.date', 'DESC');
दस्तावेज़:https://laravel.com/docs/5.4/queries , अनुभाग (CTRL+F):उन्नत जुड़ाव
थोड़ा और स्पष्ट करने के लिए:
$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');
में परिणाम:
JOIN on `times`.`ath_id` = `b`.`auth_id` WHERE `times`.`stroke_id` = 'b.stroke_id' -- AS STRING
भ्रम तब हुआ जब toSql()
आपकी क्वेरी वापस कर दी और आपने मान लिया कि Laravel
जानता है कि:
['b.stroke_id', 'b.time', '4298584']
पहले दो बाइंड बाइंडिंग कॉलम हैं। लेकिन where()
सोचता है कि वे सिर्फ तार।