我在使用子查詢的mysql中創建了一個查詢。我試圖重現此查詢在Laravel 4.2這樣的:如何在Laravel 4.2中連接子查詢得到的表
$store_booklets = DB::table('booklets')
->select(
'booklets.id',
'booklets.title',
'booklets.start_date',
'booklets.end_date'
)
->join('booklet_store', function ($join) use ($storeId) {
$join->on('booklets.id', '=', 'booklet_store.booklet_id')
->where('booklet_store.store_id', '=', $storeId);
})
->whereRaw('booklets.active = 1')
->whereRaw('booklets.start_date < curdate()')
->whereRaw('booklets.end_date > curdate()');
$store_booklets_products = DB::table('booklet_product')
->select('*')
->join(DB::raw("({$store_booklets->toSql()}) as store_booklets"), function ($join) {
$join->on('booklet_product.booklet_id', '=', 'store_booklets.id');
});
當我做$store_booklets_products->get()
它給了我一個
SQLSTATE[HY000]: General error: 2031
雖然,如果我做$store_booklets_products->toSql()
它輸出正確的SQL查詢。
我無法弄清楚查詢有什麼問題。我之前在Laravel 5中遇到過類似的問題,那就是在子查詢中使用方法where
,我使用whereRaw
來解決此問題。但這似乎並不適用於Laravel 4.2。
在this問題被稱爲是從一個子查詢產生的表中選擇一個時,應使用方法mergeBindings($subqueryQueryBuilder)
和我想這
$store_booklets_products = DB::table('booklet_product')
->mergeBindings($store_booklets)
->select('*')
->join(DB::raw("({$store_booklets->toSql()}) as store_booklets"), function ($join) {
$join->on('booklet_product.booklet_id', '=', 'store_booklets.id');
});
但在我的情況下,錯誤仍然存在。
有沒有人知道我可能會做錯什麼?