当我创建一篇文章时,我可以附加一个图像,作为缩略图。一切正常,图像上传到img目录,图像路径被添加到图像表,图像表中的article_id与正在创建的文章的ID相关。
在我的RouteServiceProvider中,我有:
public function boot(Router $router)
{
$router->bind('blog', function($id)
{
return Article::with('images')->findOrFail($id);
});
$router->bind('tags', function($name)
{
return Tag::where('name', $name)->firstOrFail();
});
parent::boot($router);
}
在我看来,我有:
@foreach ($articles as $article)
<h2><a href="/blog/{{ $article->id }}">{{ $article->title }}</a></h2>
<p>{{ $article->body }}</p>
<small>Posted on {{ date('F d, Y', strtotime($article->created_at)) }} by {{ $article->user->name }}</small>
<img src="{{ $article->images }}">
@endforeach
{{ $article->images }}
返回一个集合,例如:
[{"id":17,"path":"img\/image2.jpg.jpg","article_id":49,"created_at":"2015-10-25 01:57:49","updated_at":"2015-10-25 01:57:49"}]
它基本上为foreach语句中的每个文章图像重复上述内容,除了id,article_id,path等所有更改。
{{ $article->images->path }}
返回错误“试图获取非对象的属性”。如何在routeserviceprovider中编写代码,以便它只获取一个图像而不是一个集合,那么我可以使用{{ $article->images->path }}
而不会出错?
答案 0 :(得分:1)
如果您的文章各有一张图片,请使用hasOne()
。如果您的文章可以包含多个图像,那么您需要迭代每个图像(集合)以获取其路径,或者使用->first()
...或者编写一个自定义方法,根据任何内容返回单个图像它必须满足的标准。
答案 1 :(得分:1)
我从未真正以RouterServiceProvider
方式完成,不确定规则是否与Controller
方式相同。无论如何,&#34;试图获得非对象的属性&#34;错误表明Laravel认为来自$article->images
的图像不是对象,因此,如果将其解码为数组,则可以将对象的成员作为对象进行访问。也许以下内容将为您解决问题提供一些帮助。
在控制器中:
return View::make('pages.blog')
->with('images', json_decode($article->images));
以下表明我是如何做到这一点的。
代码#1:
<?php
$data_string = "[{\"id\":17,\"path\":\"img\/image2.jpg.jpg\",\"article_id\":49, \"created_at\":\"2015-10-25 01:57:49\",\"updated_at\":\"2015-10-25 01:57:49\"}, {\"id\":23,\"path\":\"img\/image23.jpg.jpg\",\"article_id\":67, \"created_at\":\"2015-10-25 03:43:11\",\"updated_at\":\"2015-10-25 03:43:11\"}, {\"id\":11,\"path\":\"img\/image11.jpg.jpg\",\"article_id\":44, \"created_at\":\"2015-10-25 10:57:49\",\"updated_at\":\"2015-10-25 10:57:49\"}]";
$articles = json_decode($data_string);
var_dump($articles);
输出:
array(3) {
[0]=>
object(stdClass)#1 (5) {
["id"]=> int(17)
["path"]=>string(18) "img/image2.jpg.jpg"
["article_id"]=>int(49)
["created_at"]=>string(19) "2015-10-25 01:57:49"
["updated_at"]=>string(19) "2015-10-25 01:57:49"
}
[1]=>
object(stdClass)#2 (5) {
["id"]=>int(23)
["path"]=>string(19) "img/image23.jpg.jpg"
["article_id"]=>int(67)
["created_at"]=>string(19) "2015-10-25 03:43:11"
["updated_at"]=>string(19) "2015-10-25 03:43:11"
}
[2]=>
object(stdClass)#3 (5) {
["id"]=>int(11)
["path"]=>string(19) "img/image11.jpg.jpg"
["article_id"]=>int(44)
["created_at"]=>string(19) "2015-10-25 10:57:49"
["updated_at"]=>string(19) "2015-10-25 10:57:49"
}
}
代码#2:
foreach($articles as $article) {
echo "article(" . $article->id . "): " . $article->path . "\n";
}
输出:
article(17): img/image2.jpg.jpg
article(23): img/image23.jpg.jpg
article(11): img/image11.jpg.jpg