d3bug3r
d3bug3r

Reputation: 2586

Eloquent with(), select() and where() selection

This is my query to fetch data from 2 different table.

$variant = Variant::with(['v_detail' => function($q){
            $q->select('variant_dtl_name');
        }])->where('product_id','=',$productId)->get();

There is output, but v_detail returning empty list

result:

created_at: "2015-11-07 12:37:26"
id: 1
product_id: 30
updated_at: "2015-11-07 12:37:26"
v_detail: []
variant_name: "Pricing"

But with these query:

$variant = Variant::with('v_detail')->where('product_id','=',$productId)->get();

The result is:

created_at: "2015-11-07 12:37:26"
id: 1
product_id: 30
updated_at: "2015-11-07 12:37:26"
v_detail: [{id: 1, variant_id: 1, variant_dtl_name: "Adult", variant_dtl_price: 25,…},…]
0: {id: 1, variant_id: 1, variant_dtl_name: "Adult", variant_dtl_price: 25,…}
1: {id: 2, variant_id: 1, variant_dtl_name: "Senior", variant_dtl_price: 15,…}
2: {id: 3, variant_id: 1, variant_dtl_name: "Children", variant_dtl_price: 8,…}
variant_name: "Pricing"

Now, on the query that work, how can I fetch a specific column names. Thanks!!

Upvotes: 1

Views: 591

Answers (1)

The Alpha
The Alpha

Reputation: 146191

You have this:

$variant = Variant::with(['v_detail' => function($q)
{
    // Either add the related foreign key or select all
    $q->select('related_foreign_key', 'variant_dtl_name');

}])->where('product_id','=',$productId)->get();

Since you are selecting only a single field which is variant_dtl_name then it's not possible to find out the related models because the relation builder foreign key is required. So, you have to select that foreign key as well. Notice the related_foreign_key in sub-query so use the right one, probably that is variant_id but not sure because you didn't mention anything about that.

Upvotes: 1

Related Questions