Ich habe eine Abfrage in mysql erstellt, die eine Unterabfrage verwendet. Ich habe versucht, diese Abfrage in Laravel 4.2 so zu reproduzieren:Wie man Tabellen verbindet, die aus Unterabfragen in Laravel resultieren 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');
});
Wenn ich $store_booklets_products->get()
tun es gibt mir ein
SQLSTATE[HY000]: General error: 2031
Obwohl, wenn ich $store_booklets_products->toSql()
tun gibt es die richtige SQL-Abfrage.
Ich kann nicht herausfinden, was mit Abfrage falsch ist. Ich hatte ein ähnliches Problem in Laravel 5, bevor das mit der Verwendung der Methode where
innerhalb der Unterabfrage zu tun hatte, löste ich es mit whereRaw
stattdessen. Aber das scheint in Laravel nicht zu funktionieren 4.2.
In this Frage bezeichnet, dass man das Verfahren mergeBindings($subqueryQueryBuilder)
verwenden soll, wenn aus einer Tabelle aus einer Unterabfrage resultierenden Auswahl und ich versuchte, diesen
$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');
});
aber in meinem Fall bleibt der Fehler.
Hat jemand eine Idee von dem, was ich falsch machen könnte?