$arrAux = $cnn->table('ips_baneados')
->select('ip_user', DB::raw('count(*) as totalIps'))
->groupByRaw('ip_user')
->havingRaw('totalIps > 2 ')
->orderby('totalIps','desc')
->get();
Mostrando entradas con la etiqueta Eloquent ORM. Mostrar todas las entradas
Mostrando entradas con la etiqueta Eloquent ORM. Mostrar todas las entradas
Eloquent: groupby con count
Eloquent: relaciones polimórficas
Que una misma tabla pueda establecer relaciones una a muchas (o muchas a muchas) con tablas diferentes.
Por ejemplo guardar comentarios tanto de películas como de cineastas.
Crear un modelo Comentario:
En el modelo Pelicula:
En el modelo Cineasta:
La tabla comentario debe tener este formato:
Y ya en routes/web.php:
Por ejemplo guardar comentarios tanto de películas como de cineastas.
Crear un modelo Comentario:
public function comentario() {
return $this->morphTo();
}
En el modelo Pelicula:
public function comentarios() {
return $this->morphMany("App\Comentario", "comentario");
}
En el modelo Cineasta:
public function comentarios() {
return $this->morphMany("App\Comentario", "comentario");
}
La tabla comentario debe tener este formato:
id
comentario
comentario_id // guardar el id de la tabla
comentario_type // guardar el tipo de modelo que es: App\Cineasta ó App\Pelicula
Y ya en routes/web.php:
Route::get("/comentarios", function() {
$cineasta = Cineasta::find(1);
foreach ($cineasta->comentarios as $item) {
echo $item->comentario."<br>";
}
echo "<hr>";
$pelicula = Pelicula::find(1);
foreach ($pelicula->comentarios as $item) {
echo $item->comentario."<br>";
}
});
Eloquent: Relaciones muchos a muchos
Para las relaciones muchos a muchos siempre obligatoriamente hay que crear una tabla pivot que enlace las dos tablas entre sí.
Tabla cineastas:
id
nombre
Tabla gremios:
id
nombre_gremio
La tabla pivot se tiene que llamar obligatoriamente siempre el nombre de los dos modelos ordenados alfabéticamente separados por guión, en este caso "cineasta_gremio"
cineasta_premio:
cineasta_id
gremio_id
En el modelo Cineasta:
En routes/web.php:
Así si por ejemplo el cineasta 1 es Woody Allen sacará los gremios de actor, director y guionista.
Tabla cineastas:
id
nombre
Tabla gremios:
id
nombre_gremio
La tabla pivot se tiene que llamar obligatoriamente siempre el nombre de los dos modelos ordenados alfabéticamente separados por guión, en este caso "cineasta_gremio"
cineasta_premio:
cineasta_id
gremio_id
En el modelo Cineasta:
public function gremios() {
return $this->belongsToMany("App\Gremio");
}
En routes/web.php:
Route::get("/cineasta/{id}/gremio", function($id) {
$cineasta = Cineasta::find($id);
foreach ($cineasta->gremios as $item) {
echo $item->nombre_gremio."<br>";
}
});
Así si por ejemplo el cineasta 1 es Woody Allen sacará los gremios de actor, director y guionista.
Eloquent: Relaciones 1 a muchos
En el modelo Cliente:
En routes/web.php:
Por supuesto si se quiere se puede filtrar el resultado por lo q se quiera:
public function articulos() {
return $this->hasMany("App\Articulo");
}
En routes/web.php:
Route::get("/articulos", function() {
$articulos = Cliente::find(1)->articulos;
foreach ($articulos as $item) {
echo $item->nombre_articulo."<br>";
}
});
Por supuesto si se quiere se puede filtrar el resultado por lo q se quiera:
$articulos = Cliente::find(1)->articulos->where("pais_origen", "Italia");
Eloquent: relaciones 1 a 1
En la tabla articulos crear un campo cliente_id (obligatorio que sea de esta forma: nombre modelo+"_id")
En el modelo Cliente:
En routes/web.php:
La relación inversa sería:
En el modelo Articulo:
En routes/web.php:
En el modelo Cliente:
public function articulo() {
return $this->hasOne("App\Articulo");
}
En routes/web.php:
Route::get("/cliente/{id}/articulo", function($id) {
return Cliente::find($id)->articulo->nombre_articulo;
});
La relación inversa sería:
En el modelo Articulo:
public function cliente() {
return $this->belongsTo('App\Cliente');
}
En routes/web.php:
Route::get("/articulo/{id}/cliente", function($id) {
return Articulo::find($id)->cliente->nombre;
});
Ejemplos Eloquent ORM
$articulos = Articulo::all();
// take: indica el número de reg a sacar (el limit)
$articulos = Articulo::where("pais_origen", "España")->take(2)->orderby("nombre_articulo")->get();
Ejemplos de inserciones y modificaciones:
Route::get("/insertar", function() {
$articulos = new Articulo;
$articulos->nombre_articulo = "bolígrafo azul";
$articulos->precio = "15.66";
$articulos->pais_origen = "España";
$articulos->observaciones = "Escribe en azul";
$articulos->seccion = "papelería";
$articulos->save();
});
Route::get("/modificar", function() {
$articulos = Articulo::find(9);
$articulos->nombre_articulo = "bolígrafo azul modificado";
$articulos->precio = "19.75";
$articulos->save();
});
Modificar varios registros:
Route::get("/modificar_varios", function() {
Articulo::where("seccion", "Western")
->update(["seccion" =>"Oeste"]);
});
Route::get("/modificar_varios_dos", function() {
Articulo::where("seccion", "Oeste")
->where("pais_origen", "España")
->update(["precio" =>"99.99"]);
});
Borrar:
Route::get("/borrar", function() {
$articulo = Articulo::find(6);
$articulo->delete();
});
Route::get("/borrar_dos", function() {
Articulo::where("seccion", "Oeste")
->where("pais_origen", "España")
->delete();
});
Si al hacer un delete() no queremos q lo borre definitivamente sino que haga un softDelete es muy fácil
Seguir las instrucciones de:
use Illuminate\Database\Eloquent\SoftDeletes;
Dentro de la clase de nuestro modelo:
use SoftDeletes;
Crear una migración para add ese nuevo campo a la tabla:
Schema::table('articulos', function (Blueprint $table) {
$table->softDeletes();
});
Ejecutar esa nueva migración (php artisan migrate)
Más ejemplos en:
https://laravel.com/docs/5.0/eloquent
Modelos
Los modelos se guardan en /app/
Crear con el phpmyadmin una nueva tabla por ejemplo "premiados" y rellenarla con algún dato.
En el app/Premiados añadir:
El id de nuestra tabla SIEMPRE se tiene que llamar id pero si no se llamase así se tiene que especificar de esta manera:
Por ejemplo en el controlador de la portada sacar los datos, poner en PortadaController.php:
Y en la vista \resources\views\portada\list_premiados.blade.php:
php artisan make:model Premiados
Crear con el phpmyadmin una nueva tabla por ejemplo "premiados" y rellenarla con algún dato.
En el app/Premiados añadir:
protected $table = "premiados";
// protected fillable es para evitar modificar campos q no queremos que se inserten modifiquen
// funciona cuando se hace con Articulo::create (si se hace creando nueva instancia y con save si q permite todos)
protected $fillable = ['nom_premiado', 'foto_premiado'];
El id de nuestra tabla SIEMPRE se tiene que llamar id pero si no se llamase así se tiene que especificar de esta manera:
protected $primaryKey = "articulos_id";
Por ejemplo en el controlador de la portada sacar los datos, poner en PortadaController.php:
use App\Premiados;
...
public function index() {
$premiados = Premiados::orderByRaw('RAND()')->limit(6)->get();
return view('portada.list_premiados', compact('premiados'));
}
Y en la vista \resources\views\portada\list_premiados.blade.php:
@foreach ($premiados as $clave=>$item)
{{ $item->nom_premiado }}<br>
{{ $item->foto_premiado }}
@endforeach
Suscribirse a:
Entradas (Atom)