2017-01-06 9 views
0

Dies ist eine andere Frage, die ich zuvor gefragt, die nicht erfolgreich beantwortet wurde. Ich denke, ich habe es eingegrenzt, um die Frage präziser zu machen. Ich habe eine Eltern/Kind-Beziehung in Gehört Laravel und es kehrt die folgende (das ist das Ergebnis einer {{dd (aufgaben- $> Asset-> parent_asset())}}Access-Attribut in Laravel Sammlung

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 ▶} 
    } 

ich kann sehen, dass das Attribut „name“ ist da, und ich versuche, das Attribut „name“ für den Zugriff auf die folgende Art und Weise, aber ich erhalte eine Fehlermeldung „der Versuch, Eigentum von nicht-Objekt zu erhalten“.

$task->asset->parent_asset->name 

Wie sollte Ich habe Zugriff auf das Attribut "name" in der Sammlung?

Modellbeziehungen:

Dies ist die Beziehung in dem Asset-Modell:

public function parent_asset() 
    { 
    return $this->belongsTo('\pmms\Asset', 'parent_asset_id'); 
    } 

und die Beziehung in dem Task-Modell

public function asset() 
    { 
    return $this->belongsTo('\pmms\Asset'); 
    } 

Ergebnisse dd ($ Aufgabe) auf Abfrage $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 
} 
+0

Können Sie posten, wie Sie die Abfrage ausführen? Auch wenn Sie Ihre Modellbeziehungen posten könnten, die hilfreich sein könnten. – devk

+0

Wenn Sie darauf verweisen, die Abfrage auszuführen - sie befindet sich in einer Blade-Datei und ist genauso wie oben beschrieben - '{!! $ task-> asset-> parent_asset-> name !!} ' Die Modelle sind jetzt oben gepostet. – circle1

Antwort

1

fand ich die Antwort nach viel Kopfschütteln:

Es ist nicht das, was ich nennen benötigt: $task->asset->parent_asset['name']

Ich bin nicht sicher, warum es: $task->asset->parent_asset->name

Es ist dies ein Array in diesem Fall, aber ich habe dd($task->asset->parent_asset) und es zeigte ein Array. Als ich aus meiner Sicht zu einem Array wechselte, funktionierte es wie gewünscht.

0

Ich kann nur annehmen, dass deine Beziehungen funktionieren.

Sie dumping die Definition der Beziehung, nicht das Ergebnis der Abfrage.

Versuchen Sie, diese für die Suche verwenden:

$task = Task::with('asset.parentAsset')->first(); 

Und dann wie folgt Dump:

dd($task->asset->parent_asset->name); 

Ihre Beziehungen Unter der Annahme definiert korrekt sollte diese geben Sie das gewünschte Ergebnis.

Edit:

Wie es die Beziehung stellt sich heraus muss, um die magische Eigenschaft zu verwenden camelcased werden. Mehr Laravel 4 - Can't retrieve data in a one-to-many relationship

So benennen Sie Ihre parent_asset() Methode zu parentAsset() und versuchen Sie die oben genannten Abfragen.

+0

Ich habe versucht, die with ('asset.parent_asset') zu der Controller-Abfrage hinzuzufügen, wie Sie geschrieben haben, aber ich bekomme den gleichen Fehler. – circle1

+0

Kannst du die Aufgabe, wie ich gepostet habe, abfragen: '$ task = Aufgabe :: mit ('asset.parent_asset') -> first();' und dann die gesamte Aufgabe ausgeben: 'dd ($ task)' und das Ergebnis posten ? Sie können es vielleicht auf Pastebin tun, da es ziemlich lang sein sollte. – devk

+0

Hier ist die Task-Abfrage im Controller: '$ tasks = \ pcms \ Task :: mit ('asset.parentAsset') -> where ('do_date', '=', $ assignment_date-> format ('Ym- d ')) -> where (' assigned_to_user_id ',' = ', $ benutzer) -> orderBy (' priority_level ',' desc ') -> get(); ' – circle1