2017-10-16 4 views
1

Ich habe zwei Dateien,Laravel 5.5 Eloquent - Artikel :: finden Rückkehr null

CommentTransformer

Und

ImageTransformer

In der ersten Datei, CommentTransformer, ich abrufen kann, die ihm Artikel gehört dazu:

$article = Article::find($comment->article_id);

Ich mache die gleiche genaue Sache in meinem ImageTransformer, aber es gibt null zurück. Auch wenn ich statt Article::find($image->article_id)Article::find(1) benutze bekomme ich immer noch ein Nullresultat!

Hier ist der vollständige Code:

namespace App\Transformers; 

use App\Article; 
use App\User; 
use App\Image; 
use League\Fractal\TransformerAbstract; 

class ImageTransformer extends TransformerAbstract 
{ 
/** 
* A Fractal transformer. 
* 
* @return array 
*/ 
public function transform(Image $image) 
{ 
    $user = User::findOrFail($image->user_id); 
    $article = Article::find($image->article_id); 
    // $userArticle = User::find($article->user_id); 
    return [ 
     'id'     => (int) $image->id, 
     'original_filename' => $image->original_filename, 
     'filename'   => $image->filename, 
     'size'    => (int) $image->size, 
     'path'    => url('/') . "/" . $image->path . '/' . $image->filename, 
     'posted_by_username' => $user->name, 
     'article'   => $article //if I call $article->id it returns "Trying to get property of non-object" as it is, it returns null 
    ]; 
} 
} 

Dies ist die Antwort:

{ 
"data": [ 
    { 
     "id": 1, 
     "original_filename": "ptd.jpg", 
     "filename": "f11bbe288649e76ec3b694890160abf930601aed.jpeg", 
     "size": 103297, 
     "path": "http:\/\/192.168.1.85:1299\/uploads\/f11bbe288649e76ec3b694890160abf930601aed.jpeg", 
     "posted_by_username": "josh beck", 
     "article": null 
    } 
    ] 
} 
+0

Was ist Ihre Frage? –

+0

Warum, oh, ** warum ** ist es null, wenn ich 100% sicher bin, gibt es einen Artikel mit der ID 1. Wie ich schon oft erwähnt habe, auch wenn ich es durch '$ article = Article :: find ersetzen würde (1) 'Ich bekomme NULL auf ImageTransformer, aber ** nicht ** auf CommentTransformer. Ist das eine gut genug Frage? @ GiacomoMasseroniChiaro – Rosenberg

+0

Ich kann Ihren Code nicht verstehen, tut mir leid. Ich bin mir ziemlich sicher, dass die Zeile $ article = Article :: find (1) nicht null zurückgibt. Also ist das Problem woanders. –

Antwort

0

Ich gehe davon aus, dass dies eine zurück null weil findOrFail() würde eine Ausnahme werfen:

$article = Article::find($image->article_id); 

Wenn dieszurückgibtbedeutet dies, dass es keinen Artikel mit der angegebenen ID gibt. Sie können ID überprüfen mit dd($image-article_id);

Sie können aber auch nur die Daten laden, indem load() Methode:

$image->load(['user', 'article']); 
+0

100% sicher, es gibt einen Artikel mit der ID von 1. Es funktioniert auf 'CommentTransformer' durch den Aufruf des Artikels mit der ID von 1. Bearbeiten: Auch wenn ich es durch' Artikel :: find (1) 'ersetzen, es funktioniert 'CommentTransformer', aber nicht auf' ImageTransformer' und es ist wirklich verwirrend für mich. Eine Frage allerdings, wie würde ich $ image-> load (['user', 'article']) '' benutzen? Wie kann ich die Informationen von diesen laden? – Rosenberg

+0

Es ist unmöglich für 'Article :: find (1)' in einer Klasse zu arbeiten und nicht in einer anderen Klasse zu arbeiten. Wenn Sie in beiden Klassen "app \ Article" verwenden, sollte es funktionieren. Wenn es immer noch nicht funktioniert, hängt das Problem nicht mit dem Code zusammen, und Sie möchten möglicherweise Caching oder etwas überprüfen. –

+0

Ok, das ist seltsam. 'php artisan cache: clear' hat es funktioniert? – Rosenberg

0

Ich bin mit Alexey vereinbart. Wenn Daten dieser Benutzer-ID vorhanden sind, dann verwenden Sie: -

$user = User::find($image->user_id)->first(); 
$article = Article::find($image->article_id)->first(); 

Um die Existenz von Daten sicherzustellen.