Ich habe eine scheinbar dumme und verrückte Situation. Ich habe Aktivitätsprotokolle für die Benutzer, hat meine Benutzermodell diese Beziehung in es:Laravel Eloquente Beziehung kein Objekt, wenn etwas anderes als dd()
public function activityLogs()
{
return $this->hasMany(Log::class);
}
ziemlich geradlinig und wenn ich ein einzelnes Benutzerobjekt für alle Protokolle überprüfen funktioniert es gut. Also auf einer Seite möchte ich nur das letzte Protokoll aufgezeichnet, ich brauche das created_at
Datum davon. Beim Laden der Benutzer starte ich
$users = User::with(
[
'activityLogs' => function ($query) {
$query->orderBy('created_at', 'desc')
->limit(1);
}
]
)
und dies gibt das letzte Protokoll wie erwartet zurück. Als ich das Datum bekommen, wenn ich
dd($users->first()->activityLogs()->first()->created_at->format("d/m/Y"));
laufen bekomme ich mit dem Datum eine String Ausgabe wie erwartet. Wenn ich jedoch versuche, etwas anderes damit zu tun, wie es in eine Variable einzufügen oder es zu wiederholen, bekomme ich nur einen Fehler, dass activityLogs() -> first() kein Objekt ist. Der Code aus meiner Sicht (innerhalb einer foreach ($users as $user)
Schleife) ist
{{ $user->activityLogs()->first()->created_at }}
und es gibt mir nur den Fehler
Error (E_ERROR) Den Versuch, Eigentum von Nicht-Objekt zu erhalten (Ansicht: root_path /resources/views/acp/partials/profiles.blade.php) (Ansicht: root_path /resources/views/acp/partials/profiles.blade.php)
Ich habe versucht, auf activityLogs
als eine Sammlung und hasMany Objekt zuzugreifen. Ich habe auch versucht, die resultierende JSON-Zeichenfolge mit json_decode
zurück zu konvertieren, aber es klagt immer noch darüber, kein Objekt zu sein.
Warum? Warum kann ich den Wert vollkommen in Ordnung bekommen, wenn ich dd
benutze, aber wenn ich versuche irgendetwas anderes es ist plötzlich eine JSON-Zeichenfolge? Ich habe versucht, dies zu googeln, aber egal, welche Kombination von Wörtern ich versuche, es kommt nur mit Fragen und Anleitungen, wie man ein Eloquent-Objekt in JSON, das Gegenteil von dem, was ich will, konvertieren.
Aus einer Antwort, die ich hier gesehen habe [Laravel HasMany] (https://stackoverflow.com/questions/34571957/laravel-hasmany-method-not- funktionierend) hast du versucht '' {{$ user-> activityLogs-> first() -> created_at}} ' – rbaskam
Ja, das habe ich auch ausprobiert. – Styphon
Sie laden bereits die Aktivitätsprotokolle mit 'with', Sie müssen also nicht alles tun. Versuchen Sie, den Dump für Ihren '$ user' zu betrachten, um zu sehen, ob sich das Aktivitätsprotokoll dort befindet. – aynber