2016-12-18 5 views
0

Я не знаю точно, как это работает, поэтому я спрашиваю. Я все еще работаю над Системой Бюллетеня, и теперь я хочу под каждой категорией , a подкатегории.Недопустимый аргумент для foreach() в laravel 5.3

Например: enter image description here

Я сделал это, используя следующую нить на LaraCasts: https://laracasts.com/discuss/channels/eloquent/eloquent-getting-subcategories-from-the-categories

Теперь мой IndexController выглядит следующим образом:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Thread; 
use App\Chat; 
use App\Category; 


class IndexController extends Controller 
{ 
    /** 
    * Show the application dashboard. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     $threads = Thread::all()->toArray(); 
     $chats = Chat::orderBy('id', 'DESC')->take(50)->with('author')->get(); 
     $categories = Category::with('sub_category')->get(); 

     return view('index', compact('threads','chats','categories')); 
    } 

} 

Это моя Категория Модель:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 


    public function sub_category() 
    { 
     return $this->belongsTo(self::class, 'parent_id', 'id'); 
    } 

    public function parent_category() 
    { 
     return $this->hasMany(self::class, 'id', 'parent_id'); 
    } 


} 

Мое мнение (index.blade.php):

@foreach($categories as $category) 
     <div class="col-md-8"> 
     <div class="panel panel-primary"> 
      <div class="panel-heading"><i class="fa fa-angle-right" aria-hidden="true"></i> {{ $category->caption }}</div> 
      <div class="panel-body"> 



     @foreach($category->sub_category as $sub_category) 

       <div class="row forum-row"> 

        <div class="col-xs-12 col-md-8 col-sm-8"> 

        <div class="hidden-xs visible-sm visible-lg visible-md pull-left forum-icon-read"> 
        <i class="fa fa-comment"></i> 
        </div> 
        <a href="#">{{ $sub_category->caption }}</a><br> 
        <small>{{ $sub_category->desc }}</small> 

        </div> 

        <div class="col-xs-12 col-md-4 col-sm-4 forum-latest-container"> 
        <p class="forum-data cutoff"><a href="#">Test</a></p> 
        <small> 
        door <a class="Donateur" href="/user-Sygun">Sygun</a> 
        <p class="forum-data"> 
        2 minuten geleden </p> 
        </small> 
        </div> 

       </div> 
       @endforeach 


      </div> 
     </div> 
     </div> 
     @endforeach 

У меня также есть две таблицы базы данных:

  • Sub_categories (идентификатор, подпись, parent_id, min_rank, убывание)

  • Категории (id, подпись, min_rank, desc)

Сообщение об ошибке я получаю:

Недействительного аргумент для Еогеаспа()

Может ли вы сказать мне, что это правильный путь для достижения этой цели?

+0

У вас есть две таблицы в ваших DB 'Sub_categories' и' Categories'? –

+0

Да У меня есть @AmitGupta – Sygun

+0

Является ли '$ category-> sub_category' массивом? (Verify by 'var_dump ($ category-> sub_category);' перед внутренним циклом) - возможно, вы просто ищете вместо цикла '$ category'? – Qirel

ответ

0

Создайте две модели: Category и SubCategory.

В категории модели

public function subcategories() 
{ 
    return $this->hasMany('App\SubCategory', 'parent_id'); 
} 

В ПОДКАТЕГОРИЯ модели

public function parent_category() 
{ 
    return $this->belongsTo('App\Category', 'parent_id'); 
} 

Затем в запросе контроллера это нравится:

$categories = Category::with('subcategories')->get(); 

И, надеюсь, ваш foreach будет работать.

+0

К сожалению, я по-прежнему получаю ту же ошибку. Как, по вашему мнению, структура базы данных? Итак, как должны имена таблиц и мне нужно что-то менять в именах столбцов? – Sygun

+0

'dd ($ categories)' и показать ваш результат. –

+0

Где я должен поставить эту функцию? В каком файле? @AmitGupta – Sygun

0

Категория модель

public function subcategories(){ return $this->hasMany('SubCategory', 'parent_id'); }

На вид

@foreach($categories as $category) @foreach($category->subcategories as $subcategory) {{$subcategory->caption}} @endforeach @endforeach

и убедитесь, что вы создаете ПОДКАТЕГОРИЯ модель.

Смежные вопросы