Laravel Eloquent eager Loading and Retrieving Values From the Array - laravel

Using Laravel's Eloquent and eager loading how would one retrieve the values in the built_load_cost array and th built_load_revenue array?
```
array:11 [▼
"id" => 5
"created_at" => "2018-03-24 00:19:52"
"updated_at" => "2018-03-24 00:20:14"
"load_number" => 1
"dispatcher_id" => 3
"carrier_id" => 826097731
"customer_id" => 1
"ip" => "127.0.0.1"
"deleted_at" => null
"built_load_cost" => array:6 [▼
"id" => 4
"created_at" => "2018-03-26 19:59:34"
"updated_at" => "2018-03-26 19:59:34"
"line_haul" => "100.00"
"extra_pickups" => "0.00"
"built_load_id" => 5
]
"built_load_revenue" => array:6 [▼
"id" => 4
"created_at" => "2018-03-26 19:59:43"
"updated_at" => "2018-03-26 19:59:43"
"line_haul" => "90.00"
"extra_pickups" => "0.00"
"built_load_id" => 5
]
]
```

When accessing value through eloquent model, use camelCase, with first lower case letter:
$load->builtLoadCost->line_haul
$load['builtLoadCost']['line_haul']
If the eloquent model is converted to array, use snake_case to access relations:
$load->toArray()['built_load_revenue']['line_haul']
See also: Laravel “with” changes variable case to snake case

Related

How to search value in collection and merge model in laravel

I have 2 arrays and each array has deeply nested array below is the array
$invoices = $request->user()->invoices();
0 => array:74 [▼
"id" => "in_1MPwwCGBXoaOj5Wmk7lPY9tJ
"lines" => array:5 [▼
"object" => "list"
"data" => array:2 [▼
0 => array:24 [▶]
1 => array:24 [▶]
]
"has_more" => false
"total_count" => 2
"url" => "/v1/invoices/"
]
1 => array:74 [▼
"id" => "in_1MPwwCGBXoaO22vWmk7lPY9tJ
"lines" => array:5 [▼
"object" => "list"
"data" => array:2 [▼
0 => array:24 [▶]
1 => array:24 [▶]
]
"has_more" => false
"total_count" => 2
"url" => "/v1/invoices/"
]
i am trying to get the id from the deep nested array like this
$productnames = $invoices->first()->lines->first()->id;
and then search for the id in the modal like this
$plans = Plan::where('stripe_id', $productnames)->first();
it only display one id, and not all the id from the array,
also, when i merge both the collection it shows result like the below
$invoicescollection = new Collection($invoices);
$planscollection = new Collection($plans);
$products = $invoicescollection->merge($plans)->toArray();
array:10 [▼ // app/Http/Controllers/Billing/BillingController.php:26
0 => array:74 [▶]
1 => array:74 [▶]
"id" => 5
"title" => "All"
"slug" => "all"
"stripe_id" => "price_1MO55aOGBXoaOjvWmuQCJ14b3"
"active" => "0"
"created_at" => null
"updated_at" => null
]
i wanted to show the merge data in each array, not like the above.
thank you for the help.

Laravel Collections search

I have SQL query & sub query results and then convert these results to collection as bellow
$co=collect($users);
my collection array is as bellow
Illuminate\Support\Collection^ {#1984
#items: array:4 [
"id" => 92
"user" => "abc"
"created_at" => "2020-04-16T12:13:11.000000Z"
"updated_at" => "2020-12-05T20:32:56.000000Z"
"groups" => array:6 [
0 => array:6 [
"id" => 1
"user_id" => 1
"group_id" => 92
"title" => "new group"
"created_at" => "2020-04-16T12:13:11.000000Z"
"updated_at" => "2020-12-05T20:32:56.000000Z"
1 => array:6 [
"id" => 1
"user_id" => 1
"group_id" => 91
"title" => "other group"
"created_at" => "2020-04-16T12:13:11.000000Z"
"updated_at" => "2020-12-05T20:32:56.000000Z"
as you can see there is two columns with name of {id} , one in first array and other in sub array "groups"
I want to search the collection for ID and for title
I am using these command but both are returning empty array.
$filtered = $co->where('id',1);
dd($filtered);
also
$filtered = $co->where('title','new group');
dd($filtered)
;
or
$filtered = $co->where('groups.title','new group');
dd($filtered);
how to get these values
Thanks

Laravel: Receive data from ChargeBee

I managed to create a Customer in ChargeBee but I don't know how to access each of its values.
To receive the information I use the following code, it works perfect for me ...
ChargeBee_Environment::configure("mysite-test","test_afhjsfslfsfslk438493sshgeh");
$result = ChargeBee_Customer::retrieve("16HHGDGJslfksds");
$customer = $result->customer();
$card = $result->card();
By doing a dd($result) I get the following:
ChargeBee_Result {#356 ▼
-_response: array:1 [▼
"customer" => array:22 [▼
"id" => "16HHGDGJslfksds"
"first_name" => "User"
"last_name" => "Test"
"email" => "user#mail.com"
"phone" => "555667788"
"auto_collection" => "on"
"net_term_days" => 0
"allow_direct_debit" => false
"created_at" => 1603420880
"taxability" => "taxable"
"updated_at" => 1603420880
"pii_cleared" => "active"
"resource_version" => 1603420880216
"deleted" => false
"object" => "customer"
"billing_address" => array:6 [▶]
"card_status" => "no_card"
"promotional_credits" => 0
"refundable_credits" => 0
"excess_payments" => 0
"unbilled_charges" => 0
"preferred_currency_code" => "USD"
]
]
-_responseObj: array:1 [▼
"customer" => ChargeBee_Customer {#358 ▶}
]
}
How can I get for example the id of this Customer??? Which in this case is 16HHGDGJslfksds
You can use this line:
$customerId = $result->customer()->id

How to use whereIn() when column names don't match?

I am trying to use whereIn() to find records who have 'prov' that can be found in this array;
array:3 [▼
0 => array:6 [▼
"id" => 1
"contest_id" => 1
"contest_zone_id" => 1
"province" => "ON"
"created_at" => "2018-06-20 13:37:45"
"updated_at" => "2018-06-20 13:37:45"
]
1 => array:6 [▼
"id" => 2
"contest_id" => 1
"contest_zone_id" => 1
"province" => "SK"
"created_at" => "2018-06-20 13:37:45"
"updated_at" => "2018-06-20 13:37:45"
]
2 => array:6 [▼
"id" => 3
"contest_id" => 1
"contest_zone_id" => 1
"province" => "NB"
"created_at" => "2018-06-20 13:37:45"
"updated_at" => "2018-06-20 13:37:45"
]
]
So I can do this;
->whereIn('prov', $provinces)
However, in my 2 tables 'prov' and 'province' aren't the same so it's not working. Is there a way to explicitly declare which columns I want to compare?
Thanks!
UPDATE WITH FIX
Array needs to be pared down to just the field you are looking to match.

How to groupby() and sortby() a Laravel collection?

This is the structure of my collection
0 => array:13 [▼
"id" => 173
"campaign_id" => "STM1234"
"product_id" => "STM1234"
"group" => "24"
"version" => "1"
"created_at" => "2017-08-04 14:02:33"
"updated_at" => "2017-08-04 14:02:33"
"groups" => array:5 [▼
"id" => 24
"campaign_id" => "STM1234"
"group_name" => "default"
"updated_at" => null
I am trying to group and order this collection.
$groups = $products->groupBy('groups.group_name')->sortBy('groups.id');
The grouping works however the ordering does not work
array:2 [▼
"group2" => array:3 [▶]
"default" => array:8 [▶]
]
Default has an id of zero so should be first what do I need to do to get the group with the id of 0 first on the list?

Resources