2017-09-05 6 views
0

도움이되거나 도움이되지 않아 카테고리를 정렬하는 데 도움이되지 않습니다.이 문제를 해결하는 방법을 이해할 수 없습니다. 최근 laravel을 공부합니다.속성 [articles]이 컬렉션 인스턴스에 없습니다. laravel 5.4

컨트롤러 : class ArticlesController

public function showAll ($category_id) 
{ 
    $categories = Category::where('name', $category_id)->get(); 
    return view('categories')->with(compact('categories', 'articles')); 
} 

내가 범주로 이동하려는이보기. site.blade.php

@foreach($categories as $category) 
     <li><a class="nav-link text-white" href={{route('articlesShow', ['id'=>$category->id]) }}">{{ $category->name }}</a></li> 
@endforeach 

경로 :

Route::get('/categories/{category_id}', '[email protected]')->name('articlesShow'); 

모델 : 얻을하지 않는 카테고리

public function articles() 
{ 
    return $this->hasMany(Article::class, 'category_id'); 
} 

대표 : categories.blade.php

@foreach($categories->articles as $article) 
      <div class="col-6 col-lg-4"> <!--Post --> 
      <img src="{{ asset('upload/image/1.jpg') }}" width="255" alt="..." class="rounded img_size"> 
      <h4> {{ $article->title }}</h4> 
      <h6>Category: <a href="/"> {{ $article->category->name }}</a></h6> 
      <h6>Author: {{ $article->author }}</h6> 
      <p>{{ $article->text }} </p> 
      <p><a class="btn btn-secondary" href="{{ route('articleShow', ['id' =>$article->id]) }}"> More &raquo;</a></p> 
      </div><!--EndPost--> 
@endforeach 

답변

0

$ 범주 인 n 배열을 포함하고 articles 속성은 범주에 속하므로 기사에 액세스하기 전에 범주를 반복해야합니다.

이 시도 : 모든

@foreach($categories as $category) 
@foreach($category->articles as $article) 
     <div class="col-6 col-lg-4"> <!--Post --> 
     <img src="{{ asset('upload/image/1.jpg') }}" width="255" alt="..." class="rounded img_size"> 
     <h4> {{ $article->title }}</h4> 
     <h6>Category: <a href="/"> {{ $article->category->name }}</a></h6> 
     <h6>Author: {{ $article->author }}</h6> 
     <p>{{ $article->text }} </p> 
     <p><a class="btn btn-secondary" href="{{ route('articleShow', ['id' =>$article->id]) }}"> More &raquo;</a></p> 
     </div><!--EndPost--> 
@endforeach 
@endforeach 
+0

도움을 주셔서 감사합니다. 오류는 발생하지 않지만 링크를 클릭하면 아무 것도 표시되지 않습니다. –

+0

{{route ('articleShow', [ 'id'=> $ article-> id])}} 대신 {{route ('articleShow', [ 'categories_id'=> $ category-> id] – Quezler

+0

고마워, 이제는 기사를 표시하지만 범주를 클릭하면 메뉴에 다른 범주가 사라지고 그 곳에서 클릭 한 항목이 나타납니다. 컨트롤러의 코드는 다음과 같습니다. $ categories = Category :: with ('articles') -> where ('id', $ category_id) -> get(); return view ('categories') -> with (compact ('categories', $ categories)); –

0

첫째 : eager loading을 사용합니다.

가정하면, 해당 카테고리 ID에 대한 모든 기사를 표시해야합니다 귀하의 [email protected] 방법은 쿼리에 지정된 카테고리에 대한 모든 기사를 표시 그런 다음이

public function showAll ($category_id) 
{ 
    $categoryArticles = Category::with('articles')->where('id', $category_id)->get(); 
    return view('categories')->with('categoryArticles', $categoryArticles); 
} 

과 같아야합니다 (기사 가정을 가지고 하나의 카테고리) 편도 일 수 있습니다.

@foreach($categoryArticles->articles as $article) 
      <div class="col-6 col-lg-4"> <!--Post --> 
      <img src="{{ asset('upload/image/1.jpg') }}" width="255" alt="..." class="rounded img_size"> 
      <h4> {{ $article->title }}</h4> 
      <h6>Category: <a href="/"> {{ $categoryArticles->name }}</a></h6> 
      <h6>Author: {{ $article->author }}</h6> 
      <p>{{ $article->text }} </p> 
      <p><a class="btn btn-secondary" href="{{ route('articleShow', ['id' =>$article->id]) }}"> More &raquo;</a></p> 
      </div><!--EndPost--> 
@endforeach 
+0

시간을내어 도와 주셔서 감사합니다. 동일한 오류가 발생합니다. 속성 [articles]이 컬렉션 인스턴스에 없습니다. (보기 : /home/vagrant/Code/nexta/resources/views/categories.blade.php) –

+0

변수 이름을'$ categoryArticles'로 바꾸기 위해 더미 코드를 업데이트했습니다. 이미'$ category' 변수를 사용하고 있기 때문에 이전 블레이드 템플릿. 이것은 지금 작동해야합니다. – fab

+0

도움을 주셔서 감사합니다.하지만이 오류가 발생합니다. 정의되지 않은 변수 : categoryArticles (보기 : /home/vagrant/Code/nexta/resources/views/categories.blade.php) 최종 표현은이 변수가 없으며 이것이 왜 일어나는가입니다. –