我在数据库中有一些文章,我试图通过搜索其标题找到一个特定的文章。这是我的控制器。
public function showArticle($title)
{
$article = Article::find($title);
return view('article.show', compact('article'));
}
这是我在phpStorm中遇到的错误:在App / Article类中找不到方法“findOrFail”。
这是我的模特:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $fillable =
[
'title',
'description',
'published_at'
];
}
这是我的观点,我试图展示文章的标题和描述。
@extends('layouts.master')
@section('title', 'All articles')
@section('content')
<h1>{{$article->title}}</h1>
<article>
{{$article->description}}
</article>
@stop
当我尝试加载视图时,出现以下错误:
尝试获取非对象的属性(查看:/var/www/resources/views/article/show.blade.php)
答案 0 :(得分:3)
find()
方法不适用于您想要的任何属性。您必须传递文章的ID才能实现这一点。通过标题而不是id来查找文章要慢得多。
但如果你真的想这样做,你可以写下这样的东西:
$article = Article::where('title', $title)->first();
然后在您看来,执行以下操作:
@extends('layouts.master')
@section('title', 'All articles')
@section('content')
@if($article)
<h1>{{$article->title}}</h1>
<article>
{{$article->description}}
</article>
@else
Article not found
@endif
@stop
查看文档以获取进一步参考: http://laravel.com/docs/5.1/eloquent#retrieving-single-models
答案 1 :(得分:0)
Article::where('title', '=', $title)
方法find()
正在查找Model
类中定义的主键(默认为id
列)。
compact()
函数View会抛出错误,因为您发送的数组要查看,而不是对象。
(PHP 4,PHP 5,PHP 7)
compact - 创建包含变量及其值的数组
然后在Controller
更改compact('article')
到$article
或将刀片文件中的语法更改为数组($article['description']
)。
答案 2 :(得分:0)
尝试
$article = Article::all()->find($title);
Laravel 5.3