No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Introducci贸n a Laravel 8

Curso de Introducci贸n a Laravel 8

Profesor Italo Morales F

Profesor Italo Morales F

Cursos similares

16/21
Recursos

Aportes 8

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Esta forma de crear nuevas propiedades 鈥渃urstomizadas鈥 se llaman Accessors & Mutators, as铆 como tenemos el getNameAttribute() (Accesor) tambi茅n Laravel nos pone a la disposici贸n el setNameAttribute() (Mutator), les recomiendo darle una le铆da a esta p谩gina de la documentaci贸n de Laravel explic谩ndolo a fondo:
.
Eloquent: Mutators & Casting

Para que no se repita el mismo curso en cursos similares le agregu茅:

->where('id', '!=', $this->id)

Quedando la funci贸n similar de esta manera:

public function similar()
  {
    return $this->where('category_id', $this->category_id)->where('id', '!=', $this->id)->with('user')->take(2)->get();
  }

Una forma simplificada y que en cada refresh muestren diferentes cursos relacionados
Laravel Query Builder

public function similar()
    {
        return $this->where([
            ['category_id', $this->category_id],
            ['id', '!=', $this->id]
        ])
            ->with('user')
            ->inRandomOrder()
            ->take(2)
            ->get();
    }

Una forma mas simplificada de obtener los cursos similares usando relaciones de Eloquent en lugar de QueryBuilder y sin incluir el mismo curso repetido.

Course.php

Category.php


PageController.php (Precargar las relaciones para optimizar las consultas a la base de datos)

Comparto el c贸digo

course.blade.php

@extends('layouts.web')

@section('content')
<div class="grid grid-cols-3 gap-4">
  <div class="p-8 bg-gray-200 col-span-1">
    <ul class="flex flex-col">
      <li class="font-medium text-sm text-gray-400 uppercase mb-4">Contenido</li>
      @foreach ($course->posts as $post)
        <li class="flex items-center text-gray-600 mt-2">
          {{ $post->name }}
          @if ($post->free)
            <span class="text-xs text-gray-500 font-semibold bg-gray-300 px-2 rounded-full ml-auto">Gratis</span>
          @endif
        </li>
      @endforeach
    </ul>
  </div>
  <div class="text-gray-700 col-span-2">
    <img src="{{ $course->image }}" alt="">
    <h2 class="text-4xl">{{ $course->name }}</h2>
    <p>{{ $course->description }}</p>
    <div class="flex mt-3">
      <img src="{{ $course->user->avatar }}" class="h-10 w-10 rounded-full mr-2" alt="">
      <div>
        <p class="text-gray-500 text-sm">{{ $course->user->name }}</p>
        <p class="text-gray-300 text-xs">{{ $course->created_at->diffForHumans() }}</p>
      </div>
    </div>

    <div class="grid grid-cols-2 gap-4 my-8">
      @foreach ($course->similar() as $course)
      <div class="bg-white shadow-lg rounded-lg px-4 py-6 text-center">
        <a href="{{ route('course', $course->slug) }}">
          <img src="{{ $course->image }}" class="rounded-md mb-2" alt="">
          <h2 class="text-lg text-gray-600 truncate uppercase">{{ $course->name }}</h2>
          <h3 class="text-md text-gray-500">{{ $course->excerpt }}</h3>

          <img src="{{ $course->user->avatar }}" class="rounded-full mt-4 mx-auto h-16 w-16" alt="">
        </a>
      </div>
      @endforeach
    </div>
  </div>
</div>
<div class="text-center mt-4">
  <h1 class="text-3xl text-gray-700 mb-2 uppercase">Ultimos Cursos</h1>
  <h2 class="text-xl text-gray-600">F贸rmate online como profesional en tecnolog铆a</h2>
</div>

<livewire:course-list>
@endsection

Me sale este error.

App\Course::similar must return a relationship instance.

Pueden ayudarme por favor

No se cuanto tiempo lleva Laravel, pero no es programaci贸n es configuraci贸n. No me imagino usando este de framework para una factura, para un punto de venta o cosas de sistemas de la vida. Por ejemplo un e commerce. No se si yo programo a la antigua, de verdad que no veo la utilidad de frameworks.

    public function similar()
    {
        return $this->where('category_id',$this->category_id)
            ->with('user')
            ->take(2)
            ->get();
    }