Я пытаюсь создать простую CMS с Laravel 5, и я остановился на этом:
Названия категорий в порядке, но внутри одинаковые (дублирующие форумы)? Почему это? Мой код:
@extends('layouts.main')
@section('content')
@foreach($categories as $category)
<div class="panel panel-default">
<div class="panel-heading">{{ $category->title }}</div>
<div class="panel-body">
<table class="table">
<tbody>
@foreach($forums as $forum)
<tr>
<th scope="row">{{ $forum->id }}</th>
<td><a href="{{ generateForumURL($forum->seo_name, $forum->id) }}">{{ $forum->name }}</a></td>
<td>{{ $forum->topics }}</td>
<td>{{ $forum->posts }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endforeach
@stop
В маршрутах:
Route::get('', function()
{
$forums = DB::table('forums')
->select()
->get();
$categories = DB::table('categories')
->select()
->get();
return View::make('home', compact('forums', 'categories'));
});
В PhpMyAdmin:
Я знаю, что я ничего не делал, но я не знаю что, я новичок в Laravel. П.С. Я не очень хорошо говорю по-английски, извините за плохой язык 🙂 Большое спасибо заранее;)
Коротко: Я не хочу показывать форум в той категории, которая написана в in_category
строка. Благодарю.
ОК, здесь идет сложный ответ.
В Laravel вы можете использовать модели Eloquent в качестве способа создания сущностей в вашем приложении. В этом случае, я думаю, что красноречивые модели будут лучшим выбором.
Во-первых, создайте новую модель следующим образом app/Category.php
:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model {
protected $table = "categories";
public $timestamps = false;
public function forums() {
return $this->hasMany('App\Forum', 'in_category');
}
}
Затем создайте другую модель следующим образом app/Forum.php
:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Forum extends Model {
protected $table = "forums";
public $timestamps = false;
public function category() {
return $this->belongsTo('App\Category');
}
}
После этого вы можете изменить маршрут следующим образом:
<?php
use App\Category;
Route::get('', function()
{
$categories = Category::all();
return View::make('home', compact('categories'));
});
и ваше мнение следующее:
@extends('layouts.main')
@section('content')
@foreach($categories as $category)
<div class="panel panel-default">
<div class="panel-heading">{{ $category->title }}</div>
<div class="panel-body">
<table class="table">
<tbody>
@foreach($category->forums as $forum)
<tr>
<th scope="row">{{ $forum->id }}</th>
<td><a href="{{ generateForumURL($forum->seo_name, $forum->id) }}">{{ $forum->name }}</a></td>
<td>{{ $forum->topics }}</td>
<td>{{ $forum->posts }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endforeach
@stop
Это должно решить вашу проблему, показывая только форумы для категории в категории.
Других решений пока нет …