Laravel model not filling 1 specific column - laravel

In my model, i have the following fillable array:
protected $fillable = [
'first_name',
'last_name',
'email',
'street',
'house_number',
'province',
'phone',
'country',
'date_of_birth',
'postcode',
'account_id',
'user_id'
];
user_id is nullable and account_id is not.
When i try to create a new entity, user_id stays null in my database.
This is my code for saving the entity:
#in controller
$this->dispatch(new Job($user = $request->user(), $client = new Client(),
$request->only($client->getFillable())
));
#in job class
$client = $this->client->create(array_merge([
'user_id ' => $this->user->id,
'account_id' => $this->user->account->id
],$this->variables));
This is all of the data going into the create method:
"user_id " => 3
"account_id" => 3
"first_name" => "patrick"
"last_name" => "vd pols"
"email" => "patrickvanderpolssad22dxsxs#live.nl"
"street" => "Dijkgraaf 2"
"house_number" => "asdasd"
"province" => "Drenthe"
"country" => "asdasdsad"
"date_of_birth" => "14-12-2019"
"postcode" => "3155GA"
Both user with ID 3 and account with ID 3 exist in my database.
After saving the entity, the user_id is null:
App\Client {#384 ▼
#fillable: array:12 [▶]
#connection: "mysql"
#table: "clients"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:13 [▼
"account_id" => 3
"first_name" => "patrick"
"last_name" => "vd pols"
"email" => "patrickvanderpolssad22dxsxs#live.nl"
"street" => "Dijkgraaf 2"
"house_number" => "asdasd"
"province" => "Drenthe"
"country" => "asdasdsad"
"date_of_birth" => Carbon\Carbon #1576281600 {#385 ▶}
"postcode" => "3155GA"
"updated_at" => "2019-12-14 00:10:03"
"created_at" => "2019-12-14 00:10:03"
"id" => 8
]
#original: array:13 [▶]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
What am i not seeing?
Thanks!
Edit:
I am an idiot.
There was an extra space after user_id:
'user_id ' => $this->user->id
Solved.

You did find the catch!
But since you want me to write the answer, I gladly do it.
You had an extra space on your key 'user_id ' => $this->user->id

Related

Laravel: test response is different from real response

In a Laravel9 project:
Controller.php
// /api/auth/user
public function show (Request $request) {
$user = $request->user();
$user->makeVisible(['email', 'email_verified_at', 'social']);
return $user;
}
The social is a nullable json column
$table->json('social')->nullable();
// 'social' => '{"facebook": "1234567890", "twitter": "1234567890"}
the actual HTTP response is (which I've verified in PostMan)
{
"id": 11,
"name": "Test User",
"email": "test#example.com",
"social": null,
"email_verified_at": "2022-12-27T02:50:58.000000Z",
"created_at": "2022-12-27T02:50:58.000000Z",
"updated_at": "2022-12-27T02:50:58.000000Z"
}
But in the Feature Test
tests/Feature/Auth/User/ShowTest.php
public function test_show_current_user () {
$user = User::factory()->create();
$response = $this->actingAs($user)->get($this->api);
$response
->assertStatus(200)
->assertJson([
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'email_verified_at' => $user->email_verified_at->jsonSerialize(),
'social' => $user->social,
]);
}
This test will always fail since it can't find social in the $response
Once I dd() the $response, there is no social attribute at all:
update:
My User model (since so doesn't support <details>, I use code snippet to create a foldable code)
// the User model in Feature Test
App\Models\User^ {#4147 // tests/Feature/Auth/User/ShowTest.php
#connection: "sqlite"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
+preventsLazyLoading: false
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#escapeWhenCastingToString: false
#attributes: array:8 [
"name" => "Bettie Von"
"email" => "lhermiston#example.net"
"email_verified_at" => "2022-12-27 08:51:06"
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
"remember_token" => "eMBMnyRei4"
"updated_at" => "2022-12-27 08:51:06"
"created_at" => "2022-12-27 08:51:06"
"id" => 1
]
#original: array:8 [
"name" => "Bettie Von"
"email" => "lhermiston#example.net"
"email_verified_at" => "2022-12-27 08:51:06"
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
"remember_token" => "eMBMnyRei4"
"updated_at" => "2022-12-27 08:51:06"
"created_at" => "2022-12-27 08:51:06"
"id" => 1
]
#changes: []
#casts: array:2 [
"email_verified_at" => "datetime"
"social" => "array"
]
#classCastCache: []
#attributeCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: array:2 [
0 => "password"
1 => "remember_token"
]
#visible: []
#fillable: array:4 [
0 => "name"
1 => "email"
2 => "password"
3 => "social"
]
#guarded: array:1 [
0 => "*"
]
#rememberTokenName: "remember_token"
#accessToken: null
}
Why is the $response in the feature test different from the actual HTTP response?
And how can I pass the feature test?
I figured it out by adding a simple $user->refresh();
$user = User::factory()
->create();
$user->refresh(); // add this
$response = $this
->actingAs($user)
->get($this->api);
Thanks a lot to #KGG, #apokryfos, and #Abdel-aziz hassan for their help.

Laravel - Record Id in Collection is Not Set

Today I'm facing some very weird behavior in Laravel while fetching records from the table. I'm having a table which has One to Many Relation with itself. A Menu item can have multiple Submenu. Below is a brief structure:
Table name: site_navigation
id => Primary Key, Auto Increment
parent_id => Index, Defaults Null
menu_name => Varchar
Model => 'Sitemenu_model.php'
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Sitemenu_model extends Model
{
protected $table = 'site_navigation';
public function getParent()
{
return $this->belongsTo('App\Models\backend\Sitemenu_model', 'parent_id');
}
public function getChildren()
{
return $this->hasMany('App\Models\backend\Sitemenu_model', 'parent_id');
}
}
Controller => 'Pagescontent.php'
use App\Models\backend\Sitemenu_model;
class Pagescontent extends Controller
{
$collSiteMenu = Sitemenu_model::with('getChildren')
->orderBy('display_order', 'asc')
->get();
return view('backend.pages.pagescontent.create', ['collSiteMenu'=>$collSiteMenu]);
}
View => 'create.blade.php'
#foreach($collSiteMenu as $menu)
#php
$arrMainMenu[$menu->id] = $menu->menu_name;
#endphp
#endforeach
The '$arrMainMenu' is only having the last record of the collection. When i tried to print $menu->id, it prints blank. Even the child record doesn't print its menu id. Even if i use below code, still no output. Which means 'id' attribute is not set.
#foreach($collSiteMenu as $menu)
#isset($menu->id)
{{ 'menu id is set to '. $menu->id }}
#endisset
#endforeach
However, in controller, when i dd($collSiteMenu) it prints below:
Collection {#380 ▼
#items: array:12 [▼
0 => Sitemenu_model {#393 ▼
#table: "site_navigation"
#fillable: array:10 [▶]
+id: null
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:13 [▼
"id" => 1
"menu_name" => "About Us"
"parent_id" => null
"url_slug" => "about-us"
"canonical_url" => null
"show_in_nav" => "show_both"
"meta_title" => "About Us"
"meta_keywords" => null
"meta_description" => "this is test description"
"is_active" => "yes"
"display_order" => 1
"created_at" => "2020-09-02 12:39:20"
"updated_at" => "2020-09-04 16:21:51"
]
#original: array:13 [▼
"id" => 1
"menu_name" => "About Us"
"parent_id" => null
"url_slug" => "about-us"
"canonical_url" => null
"show_in_nav" => "show_both"
"meta_title" => "About Us"
"meta_keywords" => null
"meta_description" => "this is test description"
"is_active" => "yes"
"display_order" => 1
"created_at" => "2020-09-02 12:39:20"
"updated_at" => "2020-09-04 16:21:51"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:1 [▼
"getChildren" => Collection {#411 ▼
#items: array:2 [▼
0 => Sitemenu_model {#415 ▼
#table: "site_navigation"
#fillable: array:10 [▶]
+id: null
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:13 [▶]
#original: array:13 [▼
"id" => 7
"menu_name" => "Who We Are"
"parent_id" => 1
"url_slug" => "who-we-are"
"canonical_url" => null
"show_in_nav" => null
"meta_title" => "Who We Are"
"meta_keywords" => null
"meta_description" => null
"is_active" => "yes"
"display_order" => 1
"created_at" => "2020-09-02 14:14:03"
"updated_at" => "2020-09-02 14:14:03"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
1 => Sitemenu_model {#416 ▼
#table: "site_navigation"
#fillable: array:10 [▶]
+id: null
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:13 [▶]
#original: array:13 [▼
"id" => 8
"menu_name" => "Our Cause"
"parent_id" => 1
"url_slug" => "our-cause"
"canonical_url" => null
"show_in_nav" => null
"meta_title" => "Our Cause"
"meta_keywords" => null
"meta_description" => null
"is_active" => "yes"
"display_order" => 2
"created_at" => "2020-09-02 14:15:27"
"updated_at" => "2020-09-02 14:15:27"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
]
}
]
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
I have searched on Google but couldn't find a solution to this. Can any one guide me as where I'm going wrong.
Much Regards,
Javed

Laravel Forms - Fill a Multiple Select Input to View

I have a tricky situation here.
I have an Edit form where I can fill the existing values when I'm editing an index. (I pass a Model Object in the controller). It works for every input field, but I need to fill a certain Multiple Select field which I don't know how to do it. I tried passing this specific value in the object, either as array (which contains the IDs of each selectable value) which crashes the view or as a json string using json_encode. I read an article here where the person accomplish this but it's done with a many-to-many relationship table, but the value I need to fill doesn't come from the table.
Resulting Object using dd()
Contact {#408 ▼
+table: "contacts"
#dates: array:1 [▼
0 => "deleted_at"
]
+fillable: array:5 [▼
0 => "nombre"
1 => "apellido"
2 => "cargo"
3 => "empresa_id"
4 => "groups"
]
#casts: array:5 [▼
"nombre" => "string"
"apellido" => "string"
"cargo" => "string"
"empresa_id" => "integer"
"groups" => "array"
]
#connection: null
#primaryKey: "id"
#keyType: "int"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:9 [▼
"id" => 4
"nombre" => "redacted"
"apellido" => "redacted"
"cargo" => "redacted"
"empresa_id" => 2
"created_at" => "2017-03-09 20:30:19"
"updated_at" => "2017-11-29 17:30:55"
"deleted_at" => null
"groups" => "["2","3","4"]"
]
#original: array:9 [▼
"id" => 4
"nombre" => "redacted"
"apellido" => "redacted"
"cargo" => "redacted"
"empresa_id" => 2
"created_at" => "2017-03-09 20:30:19"
"updated_at" => "2017-11-29 17:30:55"
"deleted_at" => null
"groups" => "["2","3","4"]"
]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▼
0 => "*"
]
#dateFormat: null
#touches: []
#observables: []
#with: []
+exists: true
+wasRecentlyCreated: false
#forceDeleting: false
Multiple Select Form.
{!! Form::label('groups', 'Grupos:') !!} </br>
{!! Form::select('groups', $groups, null, ['data-actions-box' => 'true', 'multiple'=>'multiple']) !!}
If more information is needed I will edit the question.
Fixed it by transforming the array elements to int before passing it to json_encode.

Laravel use controller in the same function?

I am retrieving entities from a database, however I do have pivot table that links users and entities and for each entity I want to retrieve a user, the problem is I don't know how to use a collection inside a laravel controller function:
public function handle()
{
$dir = "public/ical/*";
foreach(glob($dir) as $file)
{
$entity_id = preg_match("/\d/", $file);
$entity = Entity::where('id', $entity_id)
->with('users')
->first();
dd($entity->users->id); //I want to retrieve that.
$icals = new ICal($file, array(
'defaultSpan' => 2,
'defaultTimeZone' => 'UTC',
'defaultWeekStart' => 'MO',
'skipRecurrence' => false,
'useTimeZoneWithRRules' => false,
));
$time_period = array(
'interval' => true,
);
if ($time_period['interval']) {
$events = $icals->eventsFromInterval('2 week');
$count = 1;
}
foreach ($events as $event) {
$dtstart = $icals->iCalDateToDateTime($event->dtstart);
$dtend = $icals->iCalDateToDateTime($event->dtend);
$dtstart_tz = $icals->iCalDateToDateTime($event->dtstart_tz);
$dtend_tz = $icals->iCalDateToDateTime($event->dtend_tz);
$database_event = new Event;
$database_event->type = "External Event";
$database_event->startdate = $dtstart->format('d-m-Y');
$database_event->endate = $dtend->format('d-m-Y');
$database_event->startime = $dtstart_tz->format('H:i');
$database_event->endtime = $dtend_tz->format('H:i');
$database_event->title = $event->summary;
$database_event->description = $event->description ;
$database_event->location = $event->location;
$database_event->entity_id = $entity_id;
$database_event->save();
$this->info("Event Retrieved");
$count++;
}
data dump dd($entity) gives:
App\Entity {#620
#table: "entities"
+timestamps: true
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:16 [
"id" => 1
"name" => "dasd"
"type" => "dsa"
"email" => "adas"
"logo" => null
"twitter_business" => null
"facebook_business" => null
"instagram_business" => null
"google_places" => null
"ical" => null
"slug" => null
"api_key" => null
"geoloc_id" => null
"deleted" => 0
"created_at" => null
"updated_at" => null
]
#original: array:16 [
"id" => 1
"name" => "dasd"
"type" => "dsa"
"email" => "adas"
"logo" => null
"twitter_business" => null
"facebook_business" => null
"instagram_business" => null
"google_places" => null
"ical" => null
"slug" => null
"api_key" => null
"geoloc_id" => null
"deleted" => 0
"created_at" => null
"updated_at" => null
]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: array:1 [
"users" => Illuminate\Database\Eloquent\Collection {#622
#items: array:2 [
0 => App\Entity {#630
#table: "entities"
+timestamps: true
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:16 [
"id" => 1
"name" => "dasd"
"type" => "dsa"
"email" => "adas"
"logo" => null
"twitter_business" => null
"facebook_business" => null
"instagram_business" => null
"google_places" => null
"ical" => null
"slug" => null
"api_key" => null
"geoloc_id" => null
"deleted" => 0
"created_at" => null
"updated_at" => null
]
#original: array:18 [
"id" => 1
"name" => "dasd"
"type" => "dsa"
"email" => "adas"
"logo" => null
"twitter_business" => null
"facebook_business" => null
"instagram_business" => null
"google_places" => null
"ical" => null
"slug" => null
"api_key" => null
"geoloc_id" => null
"deleted" => 0
"created_at" => null
"updated_at" => null
"pivot_user_id" => 1
"pivot_entity_id" => 1
]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: array:1 [
"pivot" => Illuminate\Database\Eloquent\Relations\Pivot {#629
+parent: App\Entity {#597
#table: "entities"
+timestamps: true
#connection: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [
0 => "*"
]
}
#foreignKey: "user_id"
#relatedKey: "entity_id"
#guarded: []
#connection: null
#table: "entity_user"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:2 [
"user_id" => 1
"entity_id" => 1
]
#original: array:2 [
"user_id" => 1
"entity_id" => 1
]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: false
#hidden: []
#visible: []
#fillable: []
}
]
#touches: []
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [
0 => "*"
]
}
1 => App\Entity {#633
#table: "entities"
+timestamps: true
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:16 [
"id" => 2
"name" => "ddasd"
"type" => "fsdf"
"email" => "fsdf"
"logo" => null
"twitter_business" => null
"facebook_business" => null
"instagram_business" => null
"google_places" => null
"ical" => null
"slug" => null
"api_key" => null
"geoloc_id" => null
"deleted" => 0
"created_at" => null
"updated_at" => null
]
#original: array:18 [
"id" => 2
"name" => "ddasd"
"type" => "fsdf"
"email" => "fsdf"
"logo" => null
"twitter_business" => null
"facebook_business" => null
"instagram_business" => null
"google_places" => null
"ical" => null
"slug" => null
"api_key" => null
"geoloc_id" => null
"deleted" => 0
"created_at" => null
"updated_at" => null
"pivot_user_id" => 1
"pivot_entity_id" => 2
]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: array:1 [
"pivot" => Illuminate\Database\Eloquent\Relations\Pivot {#625
+parent: App\Entity {#597}
#foreignKey: "user_id"
#relatedKey: "entity_id"
#guarded: []
#connection: null
#table: "entity_user"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:2 [
"user_id" => 1
"entity_id" => 2
]
#original: array:2 [
"user_id" => 1
"entity_id" => 2
]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: false
#hidden: []
#visible: []
#fillable: []
}
]
#touches: []
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [
0 => "*"
]
}
]
}
]
#touches: []
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [
0 => "*"
]
}
Your relationship between the entity object and the user object is a many to many. You cannot do
$entity->users->id
This is because you are trying to the id property on a collection of users.
Try this:
$entity->users->first()->id
To loop through your users, do this:
foreach ($entity->users as $user)
{
echo($user->id);
}

Access attribute in Laravel collection

This is related to another question I asked previously that wasn't answered successfully.
I think I have narrowed it down to make the question more precise.
I have a parent/child BelongsTo relation in Laravel and it is returning the following (which is the result of a {{dd($task->asset->parent_asset())}}
BelongsTo {#657 ▼
#foreignKey: "parent_asset_id"
#otherKey: "id"
#relation: "parent_asset"
#query: Builder {#663 ▶}
#parent: Asset {#664 ▼
#dates: array:1 [▶]
#fillable: array:19 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:24 [▼
"id" => 4
"agency_id" => 1
"name" => "Bedrock Park"
"description" => ""
"serial_number" => ""
"asset_category_id" => 5
"activity_center_id" => 1
"original_cost" => 0.0
"in_service_date" => "1920-01-01"
"expected_lifespan" => 0
"status" => 1
"notes" => ""
"created_at" => "2015-09-14 17:59:47"
"updated_at" => "2016-10-31 20:01:29"
"square_feet" => 0
"gps_longitude" => "0.000000"
"gps_latitude" => "0.000000"
"parent_asset_id" => 0
"supervisor_id" => 0
"model_number" => 0
"is_location" => 1
"asset_sub_category_id" => 0
"asset_group_id" => 2
"address" => ""
]
#original: array:24 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}
#related: Asset {#682 ▶}
}
I can see that the "name" attribute is there and I am trying to access that attribute of "name" in the following way but I receive an error "Trying to get property of non-object".
$task->asset->parent_asset->name
How should I be accessing the "name" attribute in the collection?
Model relations:
This is the relation in the asset model:
public function parent_asset()
{
return $this->belongsTo('\pmms\Asset', 'parent_asset_id');
}
and the relation in the task model
public function asset()
{
return $this->belongsTo('\pmms\Asset');
}
results of dd($task) on query $task = Task::with('asset.parent_asset')->first();
Task {#738 ▼
#dates: array:2 [▶]
#fillable: array:20 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:23 [▼
"id" => 71214
"agency_id" => 1
"sourceable_id" => 6
"sourceable_type" => "\pmms\Primary_task_type"
"primary_task_type_id" => 6
"activity_center_id" => 0
"asset_id" => 158
"hours" => 0.0
"labor_code_id" => 1
"user_id" => 7
"assigned_to_user_id" => 7
"do_date" => "2016-10-01"
"date_completed" => null
"status" => 0
"supervisor_notes" => ""
"staff_notes" => ""
"created_at" => "2016-07-17 21:44:22"
"updated_at" => "2016-07-17 21:44:22"
"priority_level" => 3
"crew_assignment_id" => null
"multi_asset_task_id" => null
"scheduled_maintenance_series_id" => 23
"pay_rate" => 0.0
]
#original: array:23 [▼
"id" => 71214
"agency_id" => 1
"sourceable_id" => 6
"sourceable_type" => "\pmms\Primary_task_type"
"primary_task_type_id" => 6
"activity_center_id" => 0
"asset_id" => 158
"hours" => 0.0
"labor_code_id" => 1
"user_id" => 7
"assigned_to_user_id" => 7
"do_date" => "2016-10-01"
"date_completed" => null
"status" => 0
"supervisor_notes" => ""
"staff_notes" => ""
"created_at" => "2016-07-17 21:44:22"
"updated_at" => "2016-07-17 21:44:22"
"priority_level" => 3
"crew_assignment_id" => null
"multi_asset_task_id" => null
"scheduled_maintenance_series_id" => 23
"pay_rate" => 0.0
]
#relations: array:2 [▼
"assignee" => User {#670 ▶}
"asset" => Asset {#666 ▼
#dates: array:1 [▶]
#fillable: array:19 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:24 [▶]
#original: array:24 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}
]
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▼
0 => "*"
]
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}
I can only assume that your relationships are working.
You are dumping the definition of relationship, not result of the query.
Try using this for query:
$task = Task::with('asset.parentAsset')->first();
And then dump like this:
dd($task->asset->parent_asset->name);
Assuming your relationships are defined correctly this should give you the result you want.
Edit:
As it turns out the relationship must be camelCased in order to use the magic property. More Laravel 4 - Can't retrieve data in a one-to-many relationship
So rename your parent_asset() method to parentAsset() and try the above queries.
I found the answer after much head shaking:
It is not this that I needed to call:
$task->asset->parent_asset->name
It is this:
$task->asset->parent_asset['name']
I am not sure why it is an array in this case but I did dd($task->asset->parent_asset) and it showed an array. Once I changed to an array in my view, it worked like I wanted.

Resources