Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Consultas básicas
// retorna object(Illuminate\Database\Eloquent\Collection)
$users = User::all();
$users = User::get();
// retorna object(App\User)
$user = User::find(10);
$user = User::all()->first();
$user = User::find(10);
$user->username = "new user";
$user->save();
$user = User::find(10);
$user->delete();
Usando where.
$user = User::where("estado","=",1)->find(10);
$user = User::find(10);
$user->username = "new user";
$user->save();
$user = User::find(10);
$user->delete();
Usando where.
$user = User::where("estado","=",1)->find(10);
Para que nos devuelva una instancia de Illuminate\Pagination\LengthAwarePaginator y pagine cada 10 registros.
$users = User::where("estado","=",1)->paginate(10);
// En la vista
foreach ($users as $key => $user) {
// $user es una Instancia de la clase User
}
$users = User::where("estado","=",1)->select("id","username")->paginate(10);
$users = User::where("estado","=",1)
->select(DB::raw("id,username, DATE_FORMAT(created_at,'%d/%m/%Y %h:%i %p') AS fecha"))
->paginate(10);
Otras funciones
$users = User::where("estado","=",1)
->whereNotNull('updated_at')
->whereNull('email')
->whereIn('id', [1, 2, 3])
->whereBetween('edad', [1, 30])
->where('username','like','%ad%')
->orderBy('username')
->orderBy('created_at','desc')
->skip(10)->take(5)
->get();
Para ver la consulta SQL que genera usamos DB::getQueryLog() esta función devuelve un array con todas las consultas
que se han generado.
En Laravel 4
// En Laravel 4
$log = DB::getQueryLog();
var_dump($log);
En Laravel 5
DB::enableQueryLog();
$log = DB::getQueryLog();
var_dump($log);
// Multiples conexiones
DB::connection('connection1')->enableQueryLog();
DB::connection('connection1')->getQueryLog();
DB::connection('connection2')->enableQueryLog();
DB::connection('connection2')->getQueryLog();
$users = User::where("estado","=",1)->get()->toArray();
$users = User::where("estado","=",1)->get()->toJson();
$users = User::where("estado","=",1)->first()->toArray();
$users = User::where("estado","=",1);
if($buscar)
$users = $users->where('username','like','%ad%');
$users = $users->get();
$users = User::join("roles","users.roles_id","=","roles.id")
->where('users.estado','=',1)
->get();
$users = User::leftJoin("roles","users.roles_id","=","roles.id")
->where('users.estado','=',1)
->get();
$users = User::join("roles","users.roles_id","=","roles.id")
->leftJoin('posts',function($join){
$join->on('users.posts_id','=','posts.id')->where('posts.estado','=',1);
})
->where('users.estado','=',1)
->get();
$users = User::join("roles","users.roles_id","=","roles.id")
->leftJoin(DB::raw("(SELECT * FROM posts where posts.estado=1) as
posts"),function($join){
$join->on('users.posts_id','=','posts.id');
})
->where('users.estado','=',1)
->get();
Laravel usando Query Builder para generar SQL
Consultas varias
DB::table('users')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
$users = DB::table('orders')
->select('department', DB::raw('SUM(price) as total_sales'))
->groupBy('department')
->havingRaw('SUM(price) > 2500')
->get();
DB::table('users')->insert(
['username' => 'editor', 'edad' => 20]
);
DB::table('users')
->where('id', 1)
->update(['edad' => 20]);
DB::table('users')->delete();
DB::table('users')->where('edad', '<', 20)->delete();
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
Transacciones
DB::beginTransaction();
$user = new User;
$user->username = "user";
if($user->save())
DB::commit();
else
DB::rollback();
Procedimientos almacenados
$sql = "call my_procedure(?,?)";
DB::select($sql,array(1,20)); // retorna un array de objetos.
$db = DB::connection();
$stmt = $db->getPdo()->prepare("CALL my_procedure(?,?)");
$stmt->execute(['buscar',5]);
$result = $stmt->fetchAll(PDO::FETCH_CLASS, 'stdClass');
$sql = "SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS `users`;DROP TABLE IF EXISTS `roles`;";
DB::unprepared($sql);
$file_sql = './data/consultas.sql';
$sql = file_get_contents($file_sql);
DB::unprepared($sql);
// Si pierdes la conexión, ejemplo cuando eliminas y vuelves a crear la base de datos, esta función te permite
reconectar y seguir trabajando.
DB::reconnect();
Relaciones en Laravel
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// cambiar el nombre de la tabla
protected $table = 'my_post';
// Todo modelo debe tener 2 campos created_at y updated_at, si no usamos esos campos
en nuestra tabla
// definimos de la siguiente manera
public $timestamps = false;
Uno a Uno
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Get the phone record associated with the user.
*/
public function phone()
{
return $this->hasOne('App\Phone');
// Si el id tienen diferentes nombres
return $this->hasOne('App\Phone', 'user_id', 'local_key');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
/**
* Get the user that owns the phone.
*/
public function user()
{
return $this->belongsTo('App\User');
// Si el id tienen diferentes nombres
return $this->belongsTo('App\User', 'user_id', 'local_key');
}
}
Uno a Muchos
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* Get the comments for the blog post.
*/
public function comments()
{
return $this->hasMany('App\Comment');
// Si el id tienen diferentes nombres
return $this->hasMany('App\Comment', 'post_id', 'local_key');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
/**
* Get the post that owns the comment.
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
Muchos a Muchos
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The roles that belong to the user.
*/
public function roles()
{
return $this->belongsToMany('App\Role');
// Si el nombre de la tabla es diferente a lo predeterminado o el ID de la tabla
tiene otro nombre.
return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
/**
* The users that belong to the role.
*/
public function users()
{
return $this->belongsToMany('App\User');
// Si el nombre de la tabla es diferente a lo predeterminado o el ID de la tabla
tiene otro nombre.
return $this->belongsToMany('App\User', 'user_roles', 'role_id', 'user_id');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function roles()
{
return $this->belongsToMany('App\Role', 'user_roles')
->withPivot('create', 'read','update', 'delete');
}
}
$user = App\User::find(1);
foreach ($user->roles as $role) {
echo $role->pivot->create;
}
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'database'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'prefijo_',
'strict' => false,
'options' => array(),
],
Si realizamos consultas simples no habría ningún problema con este cambio, pero cuando realizamos consultas complejas
usando la función DB::raw es donde tenemos que obtener el prefijo y agregarlo a nuestra consulta.
Con esta función obtenemos el prefijo.
$db_prefix = DB::getTablePrefix();
$users = App\User::join("roles","users.roles_id","=","roles.id")
->leftJoin(DB::raw("(SELECT * FROM {$db_prefix}posts where {$db_prefix}posts.estado=1)
as posts"),
function($join){
$join->on('users.id','=','posts.users_id');
}
)
->select(DB::raw("{$db_prefix}users.*"))
->addSelect(DB::raw("DATE_FORMAT({$db_prefix}posts.created_at,'%d/%m/%Y %h:%i %p') AS
posts_creado"))
->where('users.estado','=',1)
->where('posts.comments_count','>',0)
->whereRaw(DB::raw("{$db_prefix}posts.tags !=''"))
->get();
También tenemos que agregar el prefijo de las tablas cuando usamos consultas SQL puras.