2017-10-16 72 views
1

我有两个文件,Laravel 5.5雄辩 - 文章::找到返回null

CommentTransformer

而且

ImageTransformer

在第一个文件,CommentTransformer,我可以检索的文章吧属于这样做:

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

我在做我的ImageTransformer中的相同的东西,但它返回null。即使不使用Article::find($image->article_id)我使用Article::find(1)我仍然得到一个空结果!

下面是完整的代码:

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 
    ]; 
} 
} 

这是响应:

{ 
"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

你的问题是什么? –

+0

为什么,哦,**为什么**它是返回null,当我100%确定有一个ID为1的文章。就像我提到很多次,即使我用'$ article = Article :: find (1)'我在ImageTransformer上得到null,但在CommentTransformer上没有**。这是一个足够好的问题吗? @GiacomoMasseroniChiaro – Rosenberg

+0

我无法理解你的代码,对不起。我非常肯定$ article = Article :: find(1)行不会返回null。所以问题在别的地方。 –

回答

0

我认为这个方法返回null因为findOrFail()将抛出一个 例外:

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

如果这返回null,表示没有指定ID的文章。你可以用dd($image-article_id);

同时检查ID,你可以通过使用load()方法加载数据:

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

100%确定有一篇文章的ID为1.它通过调用ID为1的文章在CommentTransformer上工作。编辑:另外,如果我用'Article :: find(1)替换它,它可以工作'CommentTransformer',但不在'ImageTransformer'上,这真让我费解。问题是,我将如何使用'$ image-> load(['user','article'])'?我如何加载这些信息? – Rosenberg

+0

'Article :: find(1)'不可能在一个类中工作而不能在另一个类中工作。如果你在两个类中都使用相同的'使用App \ Article',它应该可以工作。如果它仍然不起作用,则问题与代码无关,您可能需要检查缓存或其他内容。 –

+0

好吧,这很奇怪。 'php artisan cache:clear'使它工作? – Rosenberg

0

我与阿列克谢同意。如果存在该用户ID的数据,则使用: -

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

确保数据的存在。