এই উত্তরে বর্ণিত সঠিক উপায়: https://stackoverflow.com/a/52772444/2519714
বর্তমান মুহুর্তে সর্বাধিক জনপ্রিয় উত্তর সম্পূর্ণ সঠিক নয়।
এই ভাবে https://stackoverflow.com/a/24838367/2519714 কিছু ক্ষেত্রে সঠিক নয় যেমন: সাব-সিলেক্টের যেখানে বাইন্ডিং রয়েছে, তারপরে সাব-সিলেক্ট করতে সারণিতে যোগদান করা হবে, তারপরে অন্যান্য চাকাগুলি সমস্ত প্রশ্নের সাথে যুক্ত হয়েছে। উদাহরণস্বরূপ ক্যোয়ারী:
select * from (select * from t1 where col1 = ?) join t2 on col1 = col2 and col3 = ? where t2.col4 = ?
এই ক্যোয়ারীটি তৈরি করতে আপনি কোড লিখবেন:
$subQuery = DB::query()->from('t1')->where('t1.col1', 'val1');
$query = DB::query()->from(DB::raw('('. $subQuery->toSql() . ') AS subquery'))
->mergeBindings($subQuery->getBindings());
$query->join('t2', function(JoinClause $join) {
$join->on('subquery.col1', 't2.col2');
$join->where('t2.col3', 'val3');
})->where('t2.col4', 'val4');
এই কোয়েরিটি সম্পাদন করার সময়, তার পদ্ধতিটি উল্লিখিত কাঁচা এসকিএল এর পরিবর্তে এই ক্ষেত্রে $query->getBindings()
যেমন ভুল ক্রমে বাইন্ডিংগুলি ফিরিয়ে দেবে ।['val3', 'val1', 'val4']
['val1', 'val3', 'val4']
এটি করার জন্য আরও একটি সময় সঠিক উপায়:
$subQuery = DB::query()->from('t1')->where('t1.col1', 'val1');
$query = DB::query()->fromSub($subQuery, 'subquery');
$query->join('t2', function(JoinClause $join) {
$join->on('subquery.col1', 't2.col2');
$join->where('t2.col3', 'val3');
})->where('t2.col4', 'val4');
এছাড়াও বাইন্ডিংগুলি স্বয়ংক্রিয়ভাবে এবং সঠিকভাবে নতুন ক্যোয়ারিতে মার্জ হবে।
belongsToMany
সাবলেট হিসাবে জটিল প্রশ্ন থাকলে আপনাকেgetQuery()
দুবার যোগ করতে হবে =>$sub->getQuery()->getQuery()