как отображать видео по категории в laravel красноречиво - PullRequest
0 голосов
/ 01 августа 2020

видео модели

protected $table = 'lokit_video';


protected $fillable = 
[
    'title',
    'cover_img',
    'trailer',
    'url',
    'order_',
    'active',
    'description',
    'lokit_category_id',
    'duration'
];
public function lokit_category(): BelongsTo
{
    return $this->belongsTo(Category::class);
}

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

protected $table = 'lokit_category';
    protected $fillable = ['name'];

в контроллере

public function index(){
       $dataCategory = Category::all();
        $dataVideo = Video::all();
        $video = Video::where('lokit_category_id', $dataCategory)->get();
        dd($video);
        return View('bnpt.content.home',compact('dataCategory','dataVideo'));
    }

когда я пробую приведенный выше код, то, что происходит с кодом, является нулевым, как исправить?

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Если вы хотите получить все видео, относящиеся ко всем категориям, вам следует установить взаимосвязь.

В Category Модель:

    public function videos()
    {
        return $this->hasMany(Video::class);
    }

В контроллере метод:

$dataCategory = Category::all();
return View('bnpt.content.home',compact('dataCategory'));

В файле просмотра:

<ul>
@foreach($dataCategory as $category)
    <li><span>{{$category->name}}</span>
        <ul>
           @foreach($category->videos as $video)
                   <li><span>{{$video->name}}</span></li>
           @endforeach
        </ul>
    </li>
@endforeach
</ul>
1 голос
/ 01 августа 2020

[ ПРОБЛЕМА ] В вашем коде

$dataCategory = Category::all();

$video = Video::where('lokit_category_id', $dataCategory)->get();

$dataCategory - это коллекция экземпляров модели всех записей в вашем lokit_category table.

[ SOLUTION ] Вы не можете сравнить collection с полем, которое ожидает id в вашем случае в операторе where.

lokit_category_id должно быть по сравнению с идентификатором категории .

Если у вас есть lokit_category_id

$videos = Video::where('lokit_category_id', $lokit_category_id)->get();
dd($videos);

Если у вас есть имя категории lokit_category, получите идентификатор, используя это имя, а затем выполните запрос.

// Get the category for which you want to get all the videos.
$categoryName = 'CATGEORY NAME';

$category = Category::where('name', $categoryName)->first();

$videos = Video::where('lokit_category_id', $category->id)->get();
dd($videos);

[ ЕСЛИ ВЫ ХОТИТЕ ВИДЕО В ОТНОШЕНИИ КАТЕГОРИИ ]

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

public function videos(){
   return $this->hasMany(App\Video::class, 'lokit_catgeory_id', 'id');
}

Контроллер

Используйте нетерпеливую загрузку , так как это поможет уменьшить количество запросов.


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

foreach($categories as $category){
    // You can access the videos for the category using the videos relation.
    $category->videos;
}
...