2015-10-14 3 views
0

У меня есть несколько статей в базе данных, и я пытаюсь найти конкретную один путем поиска по его названию. Это мой контроллер.Laravel :: найти не найден в классе

public function showArticle($title) 
{ 
    $article = Article::find($title); 

    return view('article.show', compact('article')); 

} 

Это ошибка я получаю в PhpStorm: Метод «findOrFail» не найден в классе App/статьи.

Это моя модель:

<?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)

ответ

1

find() метод не работает с любым атрибутом вы хотите. Для этого вам необходимо передать идентификатор статьи. Также поиск статей по названию вместо 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

0

1. Поиск статьи по конкретному названию

Article::where('title', '=', $title) 

Метод find() ищет первичный ключ, определенный в Model класса (по умолчанию это id столбца).

2. compact() функция

View выдает ошибку, потому что вы посылаете массив для просмотра, а не объект.

(PHP 4, PHP 5, PHP 7)

compact — Create array containing variables and their values

Затем в Controller изменения compact('article') к $article или изменить синтаксис в файле с лезвиями в массив ($article['description']).

0

Попробуйте

$article = Article::all()->find($title); 

Laravel 5,3

+0

Пожалуйста, дайте больше объяснений, почему это правильный ответ так и будущие посетители могут понять. – Fencer04

+0

Очень плохая практика, получить все статьи, а затем фильтровать коллекцию? –