Laravel 5.7 Проблема отношения многих ко многим с нумерацией страниц - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть некоторые проблемы с этим отношением в laravel. это мои таблицы MySQL

и это код моего контроллера:

namespace App\Http\Controllers\Dynamic;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Blogs;
use LaravelLocalization;
use App\BlogsCategory;


class BlogsController extends Controller
{
    public function main(){
        //$posts = new Blogs::where('lang',LaravelLocalization::getCurrent);
        $posts = new Blogs;
        $data = $posts::where('lang',LaravelLocalization::getCurrentLocale())->where('created_at','<=',NOW())->orderBy('created_at','DESC')->paginate(config('PAGINATOR_COUNTER'));
        return view('Dynamics.Blogs.Main',compact('data'));
    }
}

и это моя модель блогов:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\BlogsCategory;

class Blogs extends Model
{
    public function categories()
    {
        return $this->belongsToMany(BlogsCategory::class);
    }
}

иBlogsCategory Модель:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Blogs;

class BlogsCategory extends Model
{
    public function blogs_data()
    {
        return $this->belongsToMany(Blogs::class);
    }
}

Я хочу получить все сообщения в блогах, что их lang col 'fa' с их категорией и показывать на мой взгляд.это мой код просмотра:

@forelse($data as $tmp)
                        <div class="blog-item-left">
                            <div class="blog-left-img">
                                <img src="/upload/blogs/small/{{$tmp->img}}" alt="{{$tmp->title}}" />
                            </div>
                            <div class="blog-left-text">

                                <div class="blog-text">
                                    <span><i class="fas fa-box"></i>
                                    @foreach($data->categories as $cat_data)
                                        {{$cat_data->title}}
                                    @endforeach
                                    </span>

                                    <a href="#"><h4 class="title">{{$tmp->title}}</h4></a>
                                    <p>{{$tmp->description}}</p>
                                </div>
                            </div>
                        </div>




                        @empty
                        <h2>No Data to show!</h2>
                    @endforelse

и этот код показывает мне эту ошибку:

Неопределенное свойство: Illuminate \ Pagination \ LengthAwarePaginator :: $ Categories (Просмотр: / Пользователи / soroush / Сайты/msadd/resources/views/Dynamics/Blogs/Main.blade.php)

что я должен сделать?

1 Ответ

0 голосов
/ 22 сентября 2018

Вы просто хотите загрузить отношение "категории" с вашим запросом.

class BlogsController extends Controller
{
    public function main(){
        //$posts = new Blogs::where('lang',LaravelLocalization::getCurrent);
            $data = Blogs::with('categories')
                ->where('lang',LaravelLocalization::getCurrentLocale())
                ->where('created_at','<=', now())
                ->orderBy('created_at','DESC')
                ->paginate(config('PAGINATOR_COUNTER'));

                return view('Dynamics.Blogs.Main',compact('data'));
            }
}

И изменить итерацию шаблона категорий (блэйд (просмотр)) следующим образом:

@foreach($tmp->categories as $cat_data)
    {{$cat_data->title}}
@endforeach
...