Alan Cordova
Alan Cordova

Reputation: 171

Multiple Joins Same name Laravel

I have a question i have 4 tables

Deals
Lists
Lists_Galleries
List_has_deals
Lists_has_gallery

I need to obtain the img_src_list what is in the List_Galleries but from deals.

I have this var in this time

$query = ListsDeals::where( $matchDeals )
                    ->where('stock', '>', 0)
                    ->orwhere( $matchOtherDeals )
                    ->whereDate('end_date', '>', date('Y-m-d'))
                    ->limit( 4 )
                    ->offset( 0 )
                    ->orderBy( 'start_date' );

$deals = $query->join( 'list_has_deals', 'deals.id', '=', 'list_has_deals.deal_id'  )
        ->join( 'lists', 'list_has_deals.list_id', '=', 'lists.id' )
        ->join( 'list_has_gallery', 'lists.id', '=', 'list_has_gallery.list_id' )
        ->join( 'lists_galleries', 'list_has_gallery.gallery_id', '=', 'lists_galleries.id' )->get();

This Give me the results but how i have the same name in all tables for example title for deals and lists that overwrite the names and dont get the values correct, how i can obtain certain columns without overwrite the others? regards.

UPDATE

This give me always the same deal for all results.

$deals = $query->join( 'list_has_deals', 'deals.id', '=', 'list_has_deals.deal_id'  )
        ->join( 'lists', 'list_has_deals.list_id', '=', 'lists.id' )
        ->join( 'list_has_gallery', 'lists.id', '=', 'list_has_gallery.list_id' )
        ->join( 'lists_galleries', 'list_has_gallery.gallery_id', '=', 'lists_galleries.id' )
        ->select([ 'deals.id as deal_id', 'deals.stock as stock', 'deals.price as price', 'deals.price_reduced as price_reduced', 'deals.img_src as img_src', 'deals.title_deal as deal_title' ])->get();

UPDATE

$deals = $query->join( 'list_has_deals', 'deals.id', '=', 'list_has_deals.deal_id'  )
        ->join( 'lists', 'list_has_deals.list_id', '=', 'lists.id' );

    $other = $deals->join( 'list_has_gallery', 'lists.id', '=', 'list_has_gallery.list_id' )
        ->join( 'lists_galleries', 'list_has_gallery.gallery_id', '=', 'lists_galleries.id' )
        ->select([ 'deals.id', 'deals.stock', 'deals.price', 'deals.price_reduced', 'deals.img_src', 'deals.title_deal', 'lists_galleries.img_src_list' ])
        ->addSelect([ 'lists_galleries.img_src_list' ])
        ->get();

Upvotes: 0

Views: 1160

Answers (1)

Matthew Daly
Matthew Daly

Reputation: 9476

You can use select() to choose only those columns you want, and use aliases to rename any that clash:

$query->select(['lists.title AS title', 'lists_galleries.name AS name', 'lists.id AS id'])->get();

That way you can cherry-pick only those columns you need and deal with clashes easily.

Upvotes: 1

Related Questions