PHP - Ayuda para modificar la query. Necesito que no salgan las recetas privadas al filtrar

 
Vista:
sin imagen de perfil

Ayuda para modificar la query. Necesito que no salgan las recetas privadas al filtrar

Publicado por marypaz86 (1 intervención) el 07/06/2022 21:09:25
Buenas! necesito vuestra ayuda. Estoy con un proyecto de recetas con LAravel pero no entiendo casi nada en php y al igual es una duda muy tonta. Necesito ocultar las recetas cuando son privadas, el campo se llama "public".
El problema es que cuando vas a filtrar por nombre de la receta, titulo, o ingrediente, aparecen todas las recetas relacionas pero también las que son privadas y esto es lo que quiero corregir. SOlo en el caso que se loguee si que podrá verlo todo.
Me han comentado que tengo que añadirlo en la query del filtro pero no se como se hace, podéis ayudarme? MUchas gracias!.

Tengo el siguiente controlador:
<?php

namespace App\Http\Controllers\Web;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Receta;
use Illuminate\Database\Eloquent\Builder;
use Auth;


class RecetasController extends Controller
{


public function recetas(Request $request)
{
$resultadosPagina=24;

$filtro=$request->input('q');

if($filtro){
//$recetas= Receta::where('titulo', 'LIKE', '%' .$filtro . '%')->orderBy('created_at', 'desc')->get();
//Busqueda en Familia, Subfamilia, ingredietes o titulo de receta
//https://laravel.com/docs/7.x/eloquent-relationships#querying-relationship-existence

$recetas= Receta::whereHas('subfamilia', function (Builder $query) use ($filtro){
//familia.nombre
$query->whereHas('familia', function (Builder $query) use ($filtro){
$query->where('nombre', 'like', '%' .$filtro . '%');
//subfamilia.nombre
})->orWhere('nombre', 'like', '%' .$filtro . '%');

})->orWhereHas('ingredientes', function (Builder $query) use ($filtro){
//ingredientes.nombre
$query->where('nombre', 'like', '%' .$filtro . '%');
})
//receta.titulo
->orWhere('titulo', 'LIKE', '%' .$filtro . '%');

if (Auth::user()){
$recetas=$recetas->orderBy('created_at', 'desc')->paginate($resultadosPagina);
}else{
$recetas=$recetas->where('public', true)->orderBy('created_at', 'desc')->paginate($resultadosPagina);
}


$recetas->appends(['q' => $filtro]);


} else {

if (Auth::user()){
$recetas = Receta::orderBy('created_at', 'desc')->paginate($resultadosPagina);
}else{
$recetas = Receta::where('public', true)->orderBy('created_at', 'desc')->paginate($resultadosPagina);
}


}



$ultimasRecetas = $this->getUltimasRecetas();
return view('web.recetas', compact('recetas', 'filtro', 'ultimasRecetas'));
}

public function receta(Request $request, $receta)
{
if (Auth::user()){
$receta = Receta::where('url_key',$receta)->firstOrFail();
}else {
$receta = Receta::where('public', true)->where('url_key',$receta)->firstOrFail();
}

$ultimasRecetas = $this->getUltimasRecetas();

//recetas relacionadas
$recetasRelacionadas = Receta::where('public', true)->where('id','!=', $receta->id)->where(function (Builder $query) use ($receta){
$query->where('id_subfamilia', $receta->subfamilia->id)
->orWhereHas('subfamilia', function (Builder $query) use ($receta){
//familia.nombre
$query->where('id_familia', $receta->subfamilia->familia->id);

});
})->orderByRaw('FIELD(id_subfamilia, '.$receta->subfamilia->id.') DESC');
$recetasRelacionadas=$recetasRelacionadas->inRandomOrder()->take(6)->get();

//complementar la lista con otras recetas random no relacionadas, si son < 6

if(sizeof($recetasRelacionadas)<6){
$complemento= Receta::where('public', true)->where('id','!=', $receta->id)->inRandomOrder()->take((6-sizeof($recetasRelacionadas)))->get();
$recetasRelacionadas=$recetasRelacionadas->merge($complemento);
}


return view('web.receta', compact('receta', 'recetasRelacionadas', 'ultimasRecetas'));
}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder